算法:二叉树的所有路径

拟人算法系列文章,以容易理解的方式描述算法,点赞收藏不迷路

二叉树的所有路径

class Solution:
    def binary_tree_paths(self, root: TreeNode,):
        result: list[str] = []
        path: list[int] = []
        if cur is None:
            return result
        self.traversal(root, path, result)
        return result

    def traversal(self, cur: TreeNode, path: list[int], result: list[str]):
        path.append(cur.val)  # 中
        if cur.left is None and cur.right is None:
            sPath = '->'.join(map(str, path))
            result.append(sPath)
            return
        if cur.left:  # 左
            self.traversal(cur.left, path, result)
            path.pop()
        if cur.right:  # 右
            self.traversal(cur.right, path, result)
            path.pop()

if __name__ == '__main__':
    root = TreeNode(1)
    root.left = TreeNode(2)
    root.right = TreeNode(3)
    root.left.left = TreeNode(4)
    root.left.right = TreeNode(5)
    s = Solution()
    print(s.binary_tree_paths(root))  # ['1->2->4', '1->2->5', '1->3']

调用部分:准备一个列表path存放一个路径,一个result的列表存放所有路径

递归部分:1)参数cur,path,result,返回值无,2)退出条件,如果当前节点的左右子节点都为空,那么说明一条路径找完了,那么将path存入result,3)单层递归逻辑,好比一个人从一棵树的根节点开始,用先序遍历的方式,整体从上往下,遍历每个节点,如果当前节点左右子节点都为空说明到了一条路径的尽头,于是保存这条路径,只要当前节点的子节点不为空,那么就对子节点递归的执行同样的操作,同时每个递归调用,需要对应的pop,从而回溯

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值