leetcode129 -- Sum Root to Leaf Numbers

leetcode129 -- Sum Root to Leaf Numbers

题目

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.

An example is the root-to-leaf path 1->2->3 which represents the number 123.

Find the total sum of all root-to-leaf numbers.

Note: A leaf is a node with no children.

Example:

Input: [1,2,3]
    1
   / \
  2   3
Output: 25
Explanation:
The root-to-leaf path 1->2 represents the number 12.
The root-to-leaf path 1->3 represents the number 13.
Therefore, sum = 12 + 13 = 25.
Example 2:

Input: [4,9,0,5,1]
    4
   / \
  9   0
 / \
5   1
Output: 1026
Explanation:
The root-to-leaf path 4->9->5 represents the number 495.
The root-to-leaf path 4->9->1 represents the number 491.
The root-to-leaf path 4->0 represents the number 40.
Therefore, sum = 495 + 491 + 40 = 1026.


解答

我想的是先把所有的根到叶子的路给找到保存下来,然后再算它代表的数字。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def sumNumbers(self, root: TreeNode) -> int:
        res = []
        if not root:
            return 0
        self.helper(root, res, [])
        print(res)
        summ = 0
        for x in res:
            for i in range(len(x)):
                summ += x[i]*(10**(len(x)-1-i))
                
        return summ 
                    
    def helper(self, root, res, out):
        if not root:
            return  
        out.append(root.val)
        if not root.left and not root.right:
            res.append(out[:])
        self.helper(root.left, res, out[:])
        self.helper(root.right, res, out[:])
        

详细解的如下


# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def sumNumbers(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        
        res = []  # 用来放最终所有的从root到leaf的path
        
        if not root:
            return 0
        self.helper(root, res, [])
        summ = 0
        for x in res:
            # 算是几位数
            for i in range(len(x)):
                summ += x[i]*(10**(len(x)-1-i))
        return summ
        
    def helper(self, root, res, out):  
        """
            res 是用来放最终的结果,out是为了不断地来得到一个新的从根节点到叶子节点的path
        
        """
        if not root:
            return 
        
        out.append(root.val)
        
        # 判断root,是否已经到leaft
        
        if not root.left and not root.right:
            res.append(out[:])
            
        # 递归的去走左边和右边
        
        self.helper(root.left, res, out[:])
        self.helper(root.right, res, out[:])
        
        


总结

其实有关在binary tree上面的题目,本质上是binary tree上的问题, 比如说像这种得到root到leaf的所有的path之后,可以问许多的东西,比如这些组成的数字积是多少,和是多少,最大值,最小值是多少。

本质上是要得到所有的paths.

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦