Python 中的根到叶节点数字求和


假设我们有一个二叉树,其中只包含 0-9 的数字,这里所有根到叶子的路径都可以表示一个数字。

所以如果树是这样的 -

这表示两条路径 21 和 23,所以输出将是 21 + 23 = 44。

为了解决这个问题,我们将遵循以下步骤 -

  • 创建一个名为 dfs() 的递归函数,它将接收根节点和 num 作为参数,初始时 num = 0
  • 如果节点不为空
    • num := num * 10 + 节点的值
    • 如果节点的右子节点不为空且节点的左子节点不为空,则
      • sum := sum + num
      • num := num / 10
      • 从函数中返回
    • dfs(节点的右子节点, num)
    • dfs(节点的左子节点, num)
    • num := num / 10
    • 从方法中返回
  • 初始时 sum := 0
  • 使用根节点和 num 调用 dfs 函数
  • 返回 sum。

示例(Python)

让我们看看以下实现以更好地理解 -

 实时演示

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
def insert(temp,data):
   que = []
   que.append(temp)
   while (len(que)):
      temp = que[0]
      que.pop(0)
      if (not temp.left):
         if data is not None:
            temp.left = TreeNode(data)
         else:
            temp.left = TreeNode(0)
         break
      else:
         que.append(temp.left)
      if (not temp.right):
         if data is not None:
            temp.right = TreeNode(data)
         else:
            temp.right = TreeNode(0)
         break
      else:
         que.append(temp.right)
def make_tree(elements):
   Tree = TreeNode(elements[0])
   for element in elements[1:]:
      insert(Tree, element)
   return Tree
class Solution(object):
   def sumNumbers(self, root):
      self.sum = 0
      self.dfs(root)
      return self.sum
   def dfs(self,node,num=0):
      if node:
         num = num*10 + node.data
         if not node.right and not node.left:
            self.sum+=num
            num/=10
            return
         self.dfs(node.right,num)
         self.dfs(node.left,num)
         num/=10
         return
ob1 = Solution()
tree = make_tree([2,1,3])
print(ob1.sumNumbers(tree))

输入

[2,1,3]

输出

44

更新于: 2020-04-28

365 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告