leetcode 404
思路
我们要获取到所有的左叶子,首先要思考怎么找到左叶子节点,如果通过当前节点来判断的话是不能做到的,因为并不知道当前节点是否是左节点,所以要通过父节点来判断左节点,当左节点存在,并且左节点是叶子节点的时候,那就说明左节点是左叶子节点,一直递归遍历所有节点,那么我们将所有左叶子节点的值加起来就是结果
实现一 递归法
var sumOfLeftLeaves = function (root) {if (!root) return 0;let sum = 0;const deep = (node) => {// 左叶子if (node.left && !node.left.left && !node.left.right) {sum += node.left.val;}node.left && deep(node.left)node.right && deep(node.right)}deep(root)return sum;
};
实现二 迭代法(层序遍历)
var sumOfLeftLeaves = function (root) {if (!root) return 0;let sum = 0, queue = [root];while (queue.length) {let len = queue.length;while (len--) {const node = queue.shift();if (node.left && !node.left.left && !node.left.right) {sum += node.left.val}node.left && queue.push(node.left)node.right && queue.push(node.right)}}return sum;
};