如何使用给定的输入树递归计算二叉树的总和?

时间:2018-06-12 23:32:01

标签: python python-3.x binary-search-tree nodes

嗨!我需要帮助找到一种递归计算二叉树总和的方法。我已经把我一直在做的事情但我仍然很困惑。请,任何帮助将不胜感激。

定义一个名为sum的递归函数,它将二叉树作为 一个参数,并返回一个int - 树中所有节点值的总和。对于 例如,底部的树,函数返回35。

enter image description here

def sum(t: TN) -> int:
    if t == None:
        return 0
    else:
       return [sum(t.value)for v in t]

2 个答案:

答案 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