404. 左叶子之和
坑
注意审题啊。。是叶子而不是单纯的节点。
然后要通过父节点才能判断出是不是叶子节点。
卡哥的正经后序递归写法
var sumOfLeftLeaves = function(root) {//采用后序遍历 递归遍历// 1. 确定递归函数参数const nodesSum = function(node){// 2. 确定终止条件if(node===null){return 0;}let leftValue = sumOfLeftLeaves(node.left);let rightValue = sumOfLeftLeaves(node.right);// 3. 单层递归逻辑let midValue = 0;if(node.left&&node.left.left===null&&node.left.right===null){midValue = node.left.val;}let sum = midValue + leftValue + rightValue;return sum;}return nodesSum(root);};
我的半吊子递归(总感觉跟迭代法有点混合了,看下方)
// 审题!是左叶子而不是左节点!var sumOfLeftLeaves = function(root) {let res =0;// 递归const computeLeft =function(root){if(!root) return res;if(root.left&&!root.left.left&&!root.left.right){res +=root.left.val;}computeLeft(root.left);computeLeft(root.right);}computeLeft(root);return res;};
迭代
var sumOfLeftLeaves = function(root) {//采用层序遍历if(root===null){return null;}let queue = [];let sum = 0;queue.push(root);while(queue.length){let node = queue.shift();if(node.left!==null&&node.left.left===null&&node.left.right===null){sum+=node.left.val;}node.left&&queue.push(node.left);node.right&&queue.push(node.right);}return sum;};
