leetcode 算法题404 (简单099) 左叶子之和

    题目介绍
计算给定二叉树的所有左叶子之和。
    示例
3
   / 
  9  20
    /  
   15   7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
    解法一
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var sumOfLeftLeaves = function(root) {
          
   
  let sum = 0
  if(!root) {
          
   
    return sum;
  }
  let left = root.left, right = root.right;
  if(left) {
          
   
    if(left.left || left.right) {
          
   
      sum += sumOfLeftLeaves(left);
    } else {
          
   
      sum += left.val;
    }
  }
  if(right) {
          
   
    if(right.left || right.right) {
          
   
      sum += sumOfLeftLeaves(right);
    }
  }
  return sum;
};
执行用时 : 84 ms, 在所有 JavaScript 提交中击败了51.41%的用户
内存消耗 : 34 MB, 在所有 JavaScript 提交中击败了58.33%的用户
    解法二
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var sumOfLeftLeaves = function(root) {
          
   
  if(root === null) {
          
   
    return 0;
  }
  let temp = [root], sum = 0;
  while (temp.length) {
          
   
    let i = 0, tArray = [];
    while(i < temp.length) {
          
   
      let node = temp[i++];
      let left = node.left;
      let right = node.right;
      if(left) {
          
   
        if(left.left || left.right) {
          
   
          tArray.push(left)
        } else {
          
   
          sum += left.val;
        }
      }
      if(right && (right.left || right.right)) {
          
   
        tArray.push(right)
      }
    }
    temp = tArray;
  }
  return sum;
};
执行用时 : 88 ms, 在所有 JavaScript 提交中击败了51.41%的用户
内存消耗 : 34.7 MB, 在所有 JavaScript 提交中击败了30.56%的用户
经验分享 程序员 微信小程序 职场和发展