【问题描述】[简单]

【解答思路】

1. DFS

递进思想 一步一步递进

/先序遍历求所有节点值之和

public int sumOfTrees(TreeNode root) {if (root == null) {return 0;}int leave = root.val;int left = sumOfTrees(root.left);int right = sumOfTrees(root.right);return left + right + leave;}

在求节点之和的基础上,我们再来求所有叶子节点之和。

// 先序遍历求所有叶子节点值之和public int sumOfLeaves(TreeNode root) {if (root == null) {return 0;}int leave = 0;// 叶子节点if (root.left == null && root.right == null) {leave = root.val;}int left = sumOfLeaves(root.left);int right = sumOfLeaves(root.right);return left + right + leave;}

在求叶子节点之和的基础上,我们再来求所有左叶子节点之和。

当前节点是不是左节点,可以通过父节点标识。

    public int sumOfLeftLeaves(TreeNode root) {return sumOfLeftLeavesHelper(root, false);}// 先序遍历求所有左叶子节点值之和public int sumOfLeftLeavesHelper(TreeNode root, boolean flag) {if (root == null) {return 0;}int leave = 0;// 左叶子节点if (flag && root.left == null && root.right == null) {leave = root.val;}int left = sumOfLeftLeavesHelper(root.left, true);int right = sumOfLeftLeavesHelper(root.right, false);return left + right + leave;}

通俗易懂版本

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {int sum=0;public int sumOfLeftLeaves(TreeNode root) {if(root==null) return 0;dfs(root,0);return sum;}public void dfs(TreeNode root, int fPath){if(root.left==null && root.right==null && fPath==1){sum+=root.val;}if(root.right!=null){dfs(root.right,-1);}if(root.left!=null){dfs(root.left,1);}}}
2. BFS

时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public int sumOfLeftLeaves(TreeNode root) {if (root == null) {return 0;}Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(root);int ans = 0;while (!queue.isEmpty()) {TreeNode node = queue.poll();if (node.left != null) {if (isLeafNode(node.left)) {ans += node.left.val;} else {queue.offer(node.left);}}if (node.right != null) {if (!isLeafNode(node.right)) {queue.offer(node.right);}}}return ans;}public boolean isLeafNode(TreeNode node) {return node.left == null && node.right == null;}
}

【总结】

1. 渐进思维 善用标志位(思维混乱的时候)
2.树的问题 BFS DFS

转载链接:https://leetcode-cn.com/problems/sum-of-left-leaves/solution/javadi-gui-yu-die-dai-shi-xian-si-lu-by-ggb2312/

参考链接:https://leetcode-cn.com/problems/sum-of-left-leaves/solution/zuo-xie-zi-zhi-he-by-leetcode-solution/
来源:力扣(LeetCode)

[Leetcode][第404题][JAVA][左叶子之和][DFS][BFS]相关推荐

  1. [Leetcode][第841题][JAVA][钥匙和房间][DFS][BFS]

    [问题描述][中等] [解答思路] 当 xx 号房间中有 yy 号房间的钥匙时,我们就可以从 xx 号房间去往 yy 号房间.如果我们将这 nn 个房间看成有向图中的 nn 个节点,那么上述关系就可以 ...

  2. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...

  3. [Leetcode][第104题][JAVA][二叉树的最大深度][递归][BFS]

    [问题描述][简单] [解答思路] 1. 递归 终止条件/基本情况 root ==null 递推关系 max(l,r)+1 时间复杂度:O(N) 空间复杂度:O(height) class Solut ...

  4. [Leetcode][第257题][JAVA][二叉树的所有路径][BFS][DFS]

    [问题描述][简单] [解答思路] 1. DFS 时间复杂度:O(N^2) 空间复杂度:O(N^2) class Solution {public List<String> binaryT ...

  5. [Leetcode][第207题][JAVA][课程表][拓扑排序][DFS]

    [问题描述][中等] [解答思路] 1. 拓扑排序 复杂度分析 HashSet[] 数组 import java.util.HashSet; import java.util.LinkedList; ...

  6. [Leetcode][第111题][JAVA][BFS][二叉树的最小深度][BFS][递归]

    [问题描述][简单] [解答思路] 1. 递归 自下而上 基本情况/结束条件 : 叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点 当 root 节点左右孩子都为空时,返回 1 当 roo ...

  7. [Leetcode][第78题][JAVA][子集][位运算][回溯]

    [问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...

  8. [Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]

    [问题描述][中等] [解答思路] 1. 减法 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Ar ...

  9. [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]

    [问题描述][中等] [解答思路] 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {bool ...

最新文章

  1. core和node开发小程序_成都小程序开发:微信小程序开发要多少钱?
  2. 使用Spring MVC进行资源版本控制
  3. winform执行oracle语句,C#中的Winform应用程序连接远程Oracle数据库的配置文件及SQL语句的写法...
  4. Python basestring函数- Python零基础入门教程
  5. Problem A: 童年生活二三事
  6. 弹窗实用素材模板|UI设计中的弹窗设计技巧,快get
  7. Linux 设备树的使用技巧
  8. Nginx 如何开启gzip 来提高页面加载速度
  9. Shell-cat url-list.txt | xargs wget -c
  10. 利用IDA Pro修改51单片机bin文件
  11. 联想Win7 SP1 32位/64位OEM系统[官方原版]
  12. Weka 3.8.6安装与Weka 3.8.6功能介绍
  13. Redis入门学习笔记--附Redis工具类
  14. WHQL之无需HLK结果就可获得微软驱动数字签名+Cannot specify [ClassInstall32] section解决
  15. 操作系统 文件换行符问题
  16. 麦吉尔大学统计与计算机科学,麦吉尔大学统计学和计算机科学本科.pdf
  17. 谈一谈PAC学习理论
  18. 中山大学生科院骆观正教授课题组诚聘博士后及副研究员
  19. 很常用的倒计时脚本,可任意设置时…
  20. 分布式异步任务神器-Celery

热门文章

  1. 葡萄城报表介绍:B/S 报表软件
  2. 关于多条id相同,只取其中一条记录的sql语句
  3. 关于tag,viewWithTag
  4. 微软发布Visual Studio 2012 示例代码浏览器
  5. 管道抛光防锈机器人_全国首创!嵊州企业的这项防锈技术用在了雪龙号上
  6. javax.script.ScriptException: ReferenceError: xxx is not defined in eval
  7. Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”
  8. elasticSearch的安装步骤~
  9. linux文件系统的设计,基于Linux的文件系统设计.doc
  10. Mdi和修改的基本逻辑