📌  相关文章
📜  计算从节点到由相同值节点组成的叶子的对角路径(1)

📅  最后修改于: 2023-12-03 14:57:27.805000             🧑  作者: Mango

计算从节点到由相同值节点组成的叶子的对角路径

介绍

给定一棵二叉树,计算从根节点到所有由相同节点值组成的叶子节点的对角路径的和。对角路径是指从根节点到叶子节点,且经过了同一节点值的路径。

解题思路

要计算从节点到由相同值节点组成的叶子的对角路径的和,可以使用递归来实现。递归函数需要传入当前节点、当前路径的值以及当前路径的长度。如果当前节点为空,则返回0。如果当前节点为叶子节点,则判断当前节点的值是否等于当前路径的值。如果相等,则返回当前路径的长度,否则返回0。如果当前节点不是叶子节点,则将当前节点的值和当前路径的值进行比较。如果相等,则递归遍历左右子树,并将当前路径长度加1。如果不相等,则递归遍历左右子树,并将当前路径长度重置为1。

代码实现
class Solution:
    def __init__(self):
        self.ans = 0
        
    def sumOfLeftLeaves(self, root: TreeNode) -> int:
        self.helper(root, None, 1)
        return self.ans
        
    def helper(self, root, val, length):
        if not root:
            return
        
        if not root.left and not root.right:
            if val == root.val:
                self.ans += length
        
        if root.left:
            if val == root.val:
                self.helper(root.left, val, length+1)
            else:
                self.helper(root.left, root.val, 1)
        
        if root.right:
            if val == root.val:
                self.helper(root.right, val, length+1)
            else:
                self.helper(root.right, root.val, 1)
总结

本题需要对二叉树进行递归遍历,需要注意的点包括:判断当前节点是否为空、判断当前节点是否为叶子节点、进行递归遍历左右子树等。通过本题的练习,可以提高对二叉树递归遍历的理解和使用能力。