LeetCode 题目-257.二叉树的所有路径/404.左叶子节点之和(python实现)

作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢?

257.二叉树的所有路径

  • 题目要求

给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

  • 例如
输入:

   1
 /   \
2     3
 \
  5

输出: ["1->2->5", "1->3"]

解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
  • 分析

方法:想到的是模拟深度搜索,判断节点是否还有无左右子树如果没有就说明已经到了叶子节点可以返回一个路径了

class Solution(object):
    def binaryTreePaths(self, root):
        if root is None:
            return
        strs=""
        lists=[]
        self.q(root,lists,strs)
        return lists
    def q(self,root,lists,strs):
        if not root.left and not root.right:
            strs=strs+str(root.val)
            lists.append(strs)
        strs=strs+str(root.val)+'->'
        if root.left :
            self.q(root.left,lists,strs)
        if root.right:
            self.q(root.right, lists, strs)

404.左叶子之和

  • 题目要求

计算给定二叉树的所有左叶子之和。

  • 例如
  3
   / \
  9  20
    /  \
   15   7

在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
  • 分析

方法:深度搜索,不累加右叶子节点的值即可

class Solution(object):
    def sumOfLeftLeaves(self, root):
        if root is None:
            return 0
        if root and not root.left and not root.right:
            return 0
        nums=0
        lists=[]
        self.q(root,lists)
        for i in lists:
            nums=nums+i
        return nums
    def q(self,root,lists):
        if root.left is None and root.right is None:
            lists.append(root.val)
        if root.left:
            self.q(root.left,lists)
        #判断是否是右叶子节点
        if root.right and  (root.right.left or  root.right.right):
            self.q(root.right,lists)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值