左叶子之和

题目:

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

 

 

示例 1:

 

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

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

提示:

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

 1 public class Solution {
 2 
 3     //[3,9,20,null,null,15,7]
 4     public static void main(String[] args) {
 5         Solution solution = new Solution();
 6         TreeNode head3 = new TreeNode(-3, null, new TreeNode(4, new TreeNode(-6), null));
 7         TreeNode head4 = new TreeNode(2, new TreeNode(4, new TreeNode(-5), null), new TreeNode(0));
 8         TreeNode head6 = new TreeNode(15);
 9         TreeNode head7 = new TreeNode(7);
10         TreeNode head2 = new TreeNode(9, null, null);
11         TreeNode head5 = new TreeNode(20, head6, head7);
12 
13         TreeNode head1 = new TreeNode(3, new TreeNode(9), new TreeNode(20,new TreeNode(15),new TreeNode(7)));
14         //[0,2,4,1,null,3,-1,5,1,null,6,null,8]
15 
16         System.out.println(solution.sumOfLeftLeaves(head1));
17     }
18 
19     public int sumOfLeftLeaves(TreeNode root) {
20         int i = 0;//统计值。
21         if (root.left != null || root.right != null) {
22             i = getLeaf(null, root, i);
23         }
24         return i;
25     }
26 
27     public int getLeaf(TreeNode lastNode, TreeNode current, int i) {
28         if (current.left != null) {//有左节点
29             i = getLeaf(current, current.left, i); //继续迭代左节点并且要获取最新的i值
30         } else {//没有左和右节点并且是上级的左节点此时才需要增加 不增加继续往下走判断是不是有右节点。
31             if ( current.right == null && lastNode.left == current ) {//没有右节点并且是上级的左节点
32                 return i + current.val;
33             }
34         }
35         //当前节点左节点解析完成开始解析右节点
36         if (current.right != null) {//继续循环右节点并且要获取最新的i值
37             i = getLeaf(current, current.right, i);
38         }
39         //没有右节点返回最新i值
40         return i;
41     }
42 }

 

PS:本题转自力扣

 

posted @ 2022-08-09 20:36  康迪小哥哥  阅读(42)  评论(0)    收藏  举报