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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值