LeetCode: 404.左叶子节点
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
解析
我们需要找到这样的节点
属于叶子节点
属于父节点的左子节点
方法一:用栈,dfs遍历,用全局变量res作为累积和。遍历的过程中传递该节点是否是左子节点。同时判断左右子节点是否为None,则可以知道是不是左叶子节点。
class Solution:
def sumOfLeftLeaves(self, root: TreeNode) -> int:
stack = []
res = 0
if not root:
return res
stack.append((root, 0))
while len(stack) != 0:
p, flag = stack.pop()
if flag == 1:
if p.left == p.right == None:
res += p.val
if p.right:
stack.append((p.right, 0))
if p.left:
stack.append((p.left, 1))
return res
方法二,用递归遍历。遍历到左叶子节点则加上左叶子节点的值。
class Solution:
def sumOfLeftLeaves(self, root: TreeNode) -> int:
self.res = 0
def walk(p):
if p:
if p.left:
if p.left.left == p.left.right == None:
self.res += p.left.val
walk(p.left)
if p.right:
walk(p.right)
walk(root)
return self.res
方法三, 仍是递归,没有使用全局变量。而是使用在递归函数内部累积的方式(即有返回值)。遍历到左叶子节点,则返回值就在此基础上加上右节点的遍历。
class Solution:郑州哪家人流医院好 http://www.gz020zj.com/
def sumOfLeftLeaves(self, root: TreeNode) -> int:
if root == None:
return 0
res = 0
if root.left:
if root.left.left == root.left.right == None:
res += root.left.val
return res + self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)
方法四,在递归的过程中,用一个形参记录该节点是否为左孩子点。和用stack遍历类似。
class Solution:
def sumOfLeftLeaves(self, root: TreeNode) -> int:
def cal(p, dir):
if not p:
return 0
if p.left == p.right == None:
if dir == 1:
return p.val
else:
pass
return cal(p.left, 1) + cal(p.right, 0)
return cal(root, 0)
方法五,当然还能用bfs遍历,遍历到左叶子节点就加上去。
LeetCode: 404.左叶子节点的更多相关文章
- LeetCode 404. 左叶子之和(Sum of Left Leaves)
404. 左叶子之和 404. Sum of Left Leaves LeetCode404. Sum of Left Leaves 题目描述 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 ...
- LC: 404.左叶子节点
计算给定二叉树的所有左叶子之和. 示例: / \ 9 20 / \ 15 7 ,所以返回 24 解析 我们需要找到这样的节点 属于叶子节点 属于父节点的左子节点 方法一:用栈,dfs遍历,用全局变量r ...
- Java实现 LeetCode 404 左叶子之和
404. 左叶子之和 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 /** * Definiti ...
- [LeetCode]404. 左叶子之和(递归)、938. 二叉搜索树的范围和(递归)(BST)
题目 404. 左叶子之和 如题 题解 类似树的遍历的递归 注意一定要是叶子结点 代码 class Solution { public int sumOfLeftLeaves(TreeNode roo ...
- 【LeetCode】404. 左叶子之和
404. 左叶子之和 知识点:二叉树 题目描述 计算给定二叉树的所有左叶子之和.. 示例 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 解 ...
- 左叶子之和(sum-of-left-leaves)
LeetCode题目--左叶子之和(sum-of-left-leaves) 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 ...
- LeetCode 404. Sum of Left Leaves (C++)
题目: Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are t ...
- 404. Sum of Left Leaves 左叶子之和
[抄题]: Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are ...
- Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers) 深度优先搜索的解题详细介绍,点击 给定一个二叉树,它的每个结点都存放 ...
随机推荐
- [20190522]How to get dump or list parameters set at session level.txt
[20190522]How to get dump or list parameters set at session level.txt 1.环境:SCOTT@book> @ ver1PORT ...
- mysql综合性练习
题目描述 设定有一个数据库,里面有4张表: 学生表(student) 课程表(course) 成绩表(score) 教师信息表(teacher) 表结构如下: 表一_学生表(student) 属性名 ...
- BayaiM__Oracle ASM操作管理
BayaiM__Oracle ASM操作管理 BayaiM__Oracle ASM操作管理 ...
- BayaiM__MySQL错误对照表
BayaiM__MySQL错误对照表 原创 作者:bayaim 时间:2016-06-16 09:16:29 33 0删除编辑 ------------------------------------ ...
- 2.Python爬虫入门_requests
#2019-11-23 #requests的api使用非常简单 import requests import time if __name__=='__main__': # get请求 url_get ...
- ACM-单向链表插入排序算法(在原链表上操作)
/* 1.若链表只有一个节点或者为空,直接返回 2.将链表的前两个节点排序,并将排序之后的第二个节点的下一个节点赋空 3.此时整个链表分为了两个,将未排序的节点一一插入到已排序链表中: 3.1.第 ...
- 28道java基础面试题-下
28道java基础面试题下 15.Java语言如何进行异常处理,关键字:throws.throw.try.catch.finally分别如何使用? 答:Java通过面向对象的方法进行异常处理,把各种不 ...
- thinkPHP5 添加新模块
1. 修改build.php文件 , 添加新模块 2. cmd 运行命令 php think build --config build.php
- Java 基础系列:不变性
1.1 定义 不可变类(Immutable Objects):当类的实例一经创建,其内容便不可改变,即无法修改其成员变量. 可变类(Mutable Objects):类的实例创建后,可以修改其内容. ...
- centos 启动一个tcp服务程序
需要先yum安装: yum install nc 启动服务: nc -l 80