原题: https://leetcode-cn.com/problems/sum-of-left-leaves/
一、题目要求
计算给定二叉树的所有左叶子之和。
示例:
3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
二、解题
package com.leetcode.test.tree;
import java.util.ArrayList;
import java.util.List;
public class Solution9 {
public static void main(String[] args) {
TreeNode a1 = new TreeNode(2);
TreeNode a2 = new TreeNode(9);
TreeNode a3 = new TreeNode(20);
TreeNode a4 = new TreeNode(15);
TreeNode a5 = new TreeNode(7);
a1.left = a2;
a1.right = a3;
a3.left = a4;
a3.right = a5;
System.out.println(sumOfLeftLeaves(a1));
}
public static int sumOfLeftLeaves(TreeNode root) {
List<Integer> list = new ArrayList();
sumOfLeftLeave(root, list);
int sum = 0;
for (int i:list) { //计算list中所有数据的总和
sum += i;
}
return sum;
}
public static void sumOfLeftLeave(TreeNode root, List list) {
if (root.left != null) {
if (root.left.left == null && root.left.right == null) { //当前节点有左节点,且左节点是叶子节点
list.add(root.left.val); //将左叶子节点的值存入list
} else {
sumOfLeftLeave(root.left, list); //不是叶子节点, 则递归调用左节点
}
}
if (root.right != null) { //当前节点有右节点, 则递归调用右节点
sumOfLeftLeave(root.right, list);
}
}
}