嗨!我需要帮助找到一种递归计算二叉树总和的方法。我已经把我一直在做的事情但我仍然很困惑。请,任何帮助将不胜感激。
定义一个名为sum的递归函数,它将二叉树作为 一个参数,并返回一个int - 树中所有节点值的总和。对于 例如,底部的树,函数返回35。
def sum(t: TN) -> int:
if t == None:
return 0
else:
return [sum(t.value)for v in t]
答案 0 :(得分:1)
1。我们在这里拥有什么:
2。回想一下递归是什么?
A recursive function is a function that calls itself during its execution. This enables the function to repeat itself several times, outputting the result and the end of each iteration
3。
4。
对于二叉树,它具有根,(可选)左子节点,(可选)右子节点。 我们可以选择root作为基本案例,因为这是二叉树的起点。
private int sum(TreeNode root) {
//1. base case
if(root == null){
return 0;
}
//2. go bigger
else {
return root.val + sum(root.left) + sum(root.right);
}
}
答案 1 :(得分:0)
您需要将当前节点的值与节点左右属性的递归和函数调用相加:
class Tree:
def __init__(self, **kwargs):
self.__dict__ = {i:kwargs.get(i) for i in ['left', 'value', 'right']}
def __bool__(self):
return True
@classmethod
def binary_sum(cls, _node):
if _node:
return cls.binary_sum(getattr(_node, 'left', 0)) + _node.value+cls.binary_sum(getattr(_node, 'right', 0))
return 0
t = Tree(value = 6, left=Tree(value=3, left = Tree(value=2)), right = Tree(value = 8, left=Tree(value=7), right=Tree(value=9)))
print(Tree.binary_sum(t))
输出:
35