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

  示例:

  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.左叶子节点的更多相关文章

  1. LeetCode 404. 左叶子之和(Sum of Left Leaves)

    404. 左叶子之和 404. Sum of Left Leaves LeetCode404. Sum of Left Leaves 题目描述 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 ...

  2. LC: 404.左叶子节点

    计算给定二叉树的所有左叶子之和. 示例: / \ 9 20 / \ 15 7 ,所以返回 24 解析 我们需要找到这样的节点 属于叶子节点 属于父节点的左子节点 方法一:用栈,dfs遍历,用全局变量r ...

  3. Java实现 LeetCode 404 左叶子之和

    404. 左叶子之和 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 /** * Definiti ...

  4. [LeetCode]404. 左叶子之和(递归)、938. 二叉搜索树的范围和(递归)(BST)

    题目 404. 左叶子之和 如题 题解 类似树的遍历的递归 注意一定要是叶子结点 代码 class Solution { public int sumOfLeftLeaves(TreeNode roo ...

  5. 【LeetCode】404. 左叶子之和

    404. 左叶子之和 知识点:二叉树 题目描述 计算给定二叉树的所有左叶子之和.. 示例 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 解 ...

  6. 左叶子之和(sum-of-left-leaves)

    LeetCode题目--左叶子之和(sum-of-left-leaves) 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 ...

  7. 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 ...

  8. 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 ...

  9. Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)

    Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers) 深度优先搜索的解题详细介绍,点击 给定一个二叉树,它的每个结点都存放 ...

随机推荐

  1. Android Toolbar中的title居中问题

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/167 Android Toolbar中的title居中问题 ...

  2. dijit/_WidgetBase

    英文地址:http://dojotoolkit.org/reference-guide/1.10/dijit/_WidgetBase.html 介绍 dijit/_WidgetBase是Dijit包中 ...

  3. vuejs利用props,子组件修改父组件的数据,父组件修改子组件的的数据,数据类型为数组

    博文参考 传送们点一点 父组件: <template> <div> <aa class="abc" v-model="test" ...

  4. 如何在Appium中使用AI定位

    当我们在写自动化测试脚本的时候,传统情况下一定要知道元素的属性,如id.name.class等.那么通过AI的方式定位元素可能就不需要知道元素的属性,评价人对元素的判断来定位,比如,看到一个搜索框,直 ...

  5. cin.get()解密

    最近在使用cin.get()函数时遇到了一个迷惑行为,现已解开. 一.cin.get()的用法 char ch; ch = cin.get(); //第1种用法 cin.get(ch); //第2种用 ...

  6. Apache(基于IP地址)

    1.Apache的安装 (1)先用命令“cat /etc/passwd|grep apache”,查看有有没有Apache ①如果有Apache,我们就不用再安装 ②如果没有,我们就安装一下 (2)使 ...

  7. java中的字符串二

    public class TestString { public static void main(String[] args) { // TODO Auto-generated method stu ...

  8. 2019.6.11_MySQL进阶二:主键与外键

    通过图形界面(UI)创建外键 打开设计表,在对应的栏位填写相应的内容.其中FK_deptno是限制名 # 先给主表建立主键   ALTER TABLE dept ADD PRIMARY KEY(dep ...

  9. ICCV2019《KPConv: Flexible and Deformable Convolution for Point Clouds》

    针对semantic3D数据集: 1.数据集准备: Semantic3D dataset can be found <a href="http://www.semantic3d.net ...

  10. windows下 go vscode编译运行方法

    1:直接在终端运行go run命令编译 2.安装code runner插件,根据箭头标示顺序,可以在右侧看到它支持的语言.