题干
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/su… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
首先左叶子指,如果左节点不为空,且左节点没有左右孩子,那么这个节点就是左叶子。
我们的子问题就是将左右子节点的左叶子相加
当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。
因此我们在每一次递归时需要记录当前是否时左叶子节点,如果是我们的叶子节点就与我们上一次的结果相加,再返回。
代码实现:
/**
* @param {TreeNode} root
* @return {number}
*/
var sumOfLeftLeaves = function (root) {
function findIndex(root) {
if (root == null) return 0
let left = findIndex(root.left);
let right = findIndex(root.right);
let sumadd = 0;
if (root.left != null && root.left.left == null && root.left.right == null) {
sumadd = root.left.val
}
var add = sumadd + left + right
return add
}
return findIndex(root)
};
\