Problem: 404. 左叶子之和
思路
递归
层次遍历
递归
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
return sum(root);
}
//1、确定参数和返回值
public int sum(TreeNode root) {
//2、确定终止条件
if (root == null) {
return 0;
}
if (root.left == null && root.right == null) {
return 0;
}
int leftValue = sum(root.left);
int rightValue = sum(root.right);
//3、确定单层递归的逻辑
int midValue = 0;
if (root.left != null && root.left.left == null && root.left.right == null) {
midValue=root.left.val;
}
return midValue + leftValue + rightValue;
}
}
层次遍历
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
int sum = 0;
if (root == null) {
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode poll = queue.poll();
if (poll.left != null) {
queue.offer(poll.left);
if (poll.left.left == null && poll.left.right == null) {
sum = sum + poll.left.val;
}
}
if (poll.right != null) {
queue.offer(poll.right);
}
}
}
return sum;
}
}