LeetCode第404题:左叶子之和

178 阅读1分钟

题干

计算给定二叉树的所有左叶子之和。

示例:

     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)
 };

\