34. 二叉树中和为某一值的路径

二叉树中和为某一值的路径

http://www.nowcoder.com/questionTerminal/b736e784e3e34731af99065031301bca

参考了csdn中的代码https://blog.csdn.net/u010005281/article/details/79623396
注意把一个列表加到另一个列表中作为另一个列表的元素,一定要这样写list2.append(list1[:]),不然加的是空的,这涉及到Python的可变对象、不可变对象等机制

class Solution:
    def __init__(self):
        self.onePath = []
        self.PathArray = []
    def FindPath(self, root, expectNumber):
        if root is None:
            return self.PathArray
        self.onePath.append(root.val)
        expectNumber -= root.val
        if expectNumber==0 and not root.left and not root.right:
            self.PathArray.append(self.onePath[:])
        elif expectNumber>0:
            self.FindPath(root.left,expectNumber)
            self.FindPath(root.right,expectNumber)
        self.onePath.pop()
        return self.PathArray

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
# -*- coding:utf-8 -*-
class Solution:
    # 返回二维列表,内部每个列表表示找到的路径
    def FindPath(self, root, expectNumber):
        # write code here
        if not root:
            return []
        ret = []
        path = []
        self.Find(root, expectNumber, ret, path)
        # print ret
        # a = [];self.f(a);print a
        return ret

    def Find(self, root, target, ret, path):
        if not root:
            return 
        path.append(root.val)
        isleaf = (root.left is None and root.right is None)
        if isleaf and target == root.val:
            ret.append(path[:])
        if root.left:
            self.Find(root.left, target-root.val, ret, path)
        if root.right:
            self.Find(root.right, target-root.val, ret, path)
        path.pop()
全部评论
这种做法是不是没有最终保证长的路径先输出??感觉这道题目出的恰好是左树比右树要深,所以这么写出来是没有问题的
点赞 回复 分享
发布于 2020-01-07 17:45
第一种解法的 self.onePath.pop()是干什么
点赞 回复 分享
发布于 2021-08-14 16:12

相关推荐

不愿透露姓名的神秘牛友
10-25 11:34
点赞 评论 收藏
分享
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务