左叶子之和
题目:
给定二叉树的根节点 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:本题转自力扣

浙公网安备 33010602011771号