LeetCode_29_SumOfLeftLeaves


1. question: 左叶子之和(简单)

给定二叉树的根节点 root ,返回所有左叶子之和。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sum-of-left-leaves

示例 1:

示例1

1
2
3
输入: root = [3,9,20,null,null,15,7] 
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

1
2
输入: root = [1]
输出: 0

提示:

1
2
节点数在 [1, 1000] 范围内
-1000 <= Node.val <= 1000

2. answers

这道题需要注意的点是:左叶子。这个必须满足两个条件:叶子节点和左节点。

其实在遍历二叉树的时候,我们就能找到左节点,此时进一步判断是否是叶子节点即可。采用层序遍历,代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class Solution_0059 {

public static int sumOfLeftLeaves(TreeNode root) {

int sums = 0;
Queue<TreeNode> queue = new LinkedList<>();

if(root != null) queue.offer(root);

while(queue.size() > 0) {

int length = queue.size();

while(length-- > 0) {

root = queue.poll();

// 在找到左节点
if(root.left != null) {
queue.offer(root.left);

// 判断左节点是否是叶子节点。是则求和
if(root.left.left == null && root.left.right == null) sums += root.left.val;
}
if(root.right != null) queue.offer(root.right);

}

}

return sums;
}

public static void main(String[] args) {
System.out.println();

TreeNode tn5 = new TreeNode(7);
TreeNode tn4 = new TreeNode(15);
TreeNode tn3 = new TreeNode(20, tn4, tn5);
TreeNode tn2 = new TreeNode(9);
TreeNode tn1 = new TreeNode(3, tn2, tn3);

System.out.println(sumOfLeftLeaves(tn1));

// TreeNode tn1 = new TreeNode(3);
//
// System.out.println(sumOfLeftLeaves(tn1));

// TreeNode tn5 = new TreeNode(5);
// TreeNode tn4 = new TreeNode(4);
// TreeNode tn3 = new TreeNode(2, tn4, tn5);
// TreeNode tn2 = new TreeNode(3);
// TreeNode tn1 = new TreeNode(1, tn3, tn2);
//
// System.out.println(sumOfLeftLeaves(tn1));

}
}

3. 备注

参考力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com)代码随想录 (programmercarl.com)


文章作者: 浮云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 浮云 !
  目录