边工作边刷题:70天一遍leetcode: day 60-1

本文介绍了一种求解二叉树所有根节点到叶子节点路径的方法,通过递归实现,特别注意处理root节点和leaf节点的方式,避免重复计算。

Binary Tree Paths

要点:题很简单,不过对于递归方式很有启发性:

  • 因为root和子树的处理是不同的(root不用加”->"),所以对root要在递归开始之前处理(也就是添加到res),类似于array中0单拿出来。
  • 因为leaf node有两个分支,如果等node为空的时候push solutions,那么同样的结果会push两次,所以只能在leaf这层push。

错误点

  • 因为在leaf这层push solutions,同层还会添加res,所以不能立即返回,需要在最后pop res
  • 因为root在之前处理,要和在递归函数内一样,考虑push solutions的情况。
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    # @param {TreeNode} root
    # @return {string[]}
    def binaryTreePaths(self, root):
        def path(root, res, solutions):
            if not root: return
            res.append("->"+str(root.val))
            if not (root.left or root.right):
                solutions.append(''.join(res))
            path(root.left, res, solutions)
            path(root.right, res, solutions)
            res.pop()
        
        solutions = []
        if not root: return solutions
        res = [str(root.val)]
        if not (root.left or root.right):
            solutions.append(''.join(res))
        path(root.left, res, solutions)
        path(root.right, res, solutions)
        return solutions
        
        
        

转载于:https://www.cnblogs.com/absolute/p/5690330.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值