【Leetcode】输出二叉树的所有路径(数值型)

在这里插入图片描述

class Solution:
    def pathSum(self, root: TreeNode) -> List[List[int]]:
        path = []
        paths = []

        def dfs(root):
            if root is None:
                return None
            else:
                path.append(root.val)
            
            if root.left is None and root.right is None:
                paths.append(path[:])
            
            dfs(root.left)
            dfs(root.right)
            path.pop()

        dfs(root)
        return paths

Q:为什么两次回溯只需要一次pop()呢
A:把当前的结点(叫他N1吧)加入数组中,然后去遍历他的左孩子,左孩子的所有孩子结点都遍历完之后,又回到了N1,如果你这时候pop了,相当于把N1这个结点去掉了,而你这个时候还没有递归调用N1的右孩子结点,当你递归N1的右节点,数组里N1的值就已经被你pop了,就这出现问题了呀。只有当递归调用完N1的左右孩子才能pop当前这个N1的结点,这就是为什么只需要一次删除,况且你一个N1节点只加入了一次,当然是pop一次了。

猜你喜欢:👇🏻
【编程】二叉树的先序、中序、后序遍历
【Leetcode】Python 代码本地构造二叉树、链表
【Leetcode】组合、排列、子集、切割(回溯模板和去重方法)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值