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

题目:
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
leetcode原题链接

思路:

  • 深度优先搜索

代码:

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

class Solution:
    def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
        if not root:#递归的终止条件,已越过叶子节点,当前节点为空
            return []#证明该条路径不符合要求,return 空列表(此处不能return None,因为后序还要将left+right,NoneType不能相加)
        if not root.left and not root.right and sum==root.val:#递归的终止条件,当前节点是叶子节点,且路径和为sum
            return [[root.val]]#返回存有【当前叶子节点的值】的嵌套列表
        res=[]#res中存放 符合要求的 遍历到当前root节点的路径
        left=self.pathSum(root.left,sum-root.val)#在当前节点的左子树搜寻是否有符合要求的路径
        right=self.pathSum(root.right,sum-root.val)#在当前节点的右子树搜寻
        for i in left+right:#当前节点的左右节点均已搜寻完毕,如left=[[1]];right=[[2]];left+right=[[1],[2]],当前搜寻到i/2条路径,这两条路径均经过当前的root节点,所以我们分别将当前节点加到路径中
            res.append([root.val]+i)#i=[1],res=[[4]+[1]]=[[4,1]];i=[[2]],res+=[[4]+[2]]=[[4,2]],得到res=[[4,1],[4,2]]
        return res

为了便于理解,以二叉树[5,4,3,1,3,null,2]为例,sum=10
在这里插入图片描述
向上层return的解析
在这里插入图片描述
tips:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值