NOWCODER 剑指offer 二叉树中和为某一值的路径

题意原来是一定要从根节点一直到叶子结点,不能去中间结点路径

一个可以从根不取到叶子结点的方法(最后序列没有根据长度排序),深度遍历

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回二维列表,内部每个列表表示找到的路径
    def FindPath(self, root, expectNumber):
        # write code here
        def find(lis,node):
            if sum(lis)+node.val==expectNumber:
                lis.append(node.val)
                result.append(lis)
            elif (sum(lis)+node.val<expectNumber):
                print('function <',node.val)
                if (node.left) or (node.right):
                    lis.append(node.val)
                if node.left:
                    print('left',lis,node.left.val)
                    find(lis,node.left)
                if node.right:
                    print('right',lis,node.right.val)
                    find(lis,node.right)

        result = []
        if root.val>expectNumber:
            return []
        elif root.val==expectNumber:
            return [[root.val]]
        else:
            if (not root.left) and (not root.right):
                return []
            if root.left:
                find([root.val],root.left)
            if root.right:
                find([root.val],root.right)
            return result

——————————————————————————————————————

运行时间:27ms

占用内存:5616k

依然是深度遍历(虽然过了,但是最后结果并没有按照长度排序)

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回二维列表,内部每个列表表示找到的路径
    def FindPath(self, root, expectNumber):
        # write code here
        def find(lis,node):
            if (not node.left) and (not node.right) and (sum(lis)+node.val==expectNumber):
                result.append(lis+[node.val])
            if node.left:
                print('left',lis,node.left.val)
                find(lis+[node.val],node.left)
            if node.right:
                print('right',lis,node.right.val)
                find(lis+[node.val],node.right)

        result = []
        if root:
            find([],root)
        return result

猜你喜欢

转载自blog.csdn.net/u014381464/article/details/82025684