📅  最后修改于: 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)
本题需要对二叉树进行递归遍历,需要注意的点包括:判断当前节点是否为空、判断当前节点是否为叶子节点、进行递归遍历左右子树等。通过本题的练习,可以提高对二叉树递归遍历的理解和使用能力。