- 思路
利用递归遍历计算,每当遇到左叶子节点就求和累加。
递归的参数和返回值:参数,TreeNode;返回值直到当前节点的累加和;
递归的终止条件:当节点为空返回;
递归的单层逻辑:当遇到有左节点时return求和,中间的逻辑是利用后序遍历的递归,左右中的顺序进行处理。因为要通过递归函数的返回值来累加求取左叶子数值之和,有一个从下向上的过程。
这里有一个问题就是判断其是不是左叶子节点必须从父节点的角度来看。
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if (root == null) {
return 0;
}
int leftVal = sumOfLeftLeaves(root.left); // 左
int rightVal = sumOfLeftLeaves(root.right); // 右
int midVal = 0; // 中
if (root.left != null && root.left.left == null && root.left.right == null) {
midVal = root.left.val;
}
int sum = leftVal + rightVal + midVal;
return sum;
}
}