513.找树左下角的值
解题思路
层序遍历
代码实现
var findBottomLeftValue = function(root) {
var queue = [[root,0]];
const res =[];
while(queue.length){
const [ node,level] = queue.shift();
if(res[level]){
res[level].push(node.val);
}else{
res[level]=[];
res[level].push(node.val);
}
if(node.left) queue.push([node.left,level+1]);
if(node.right) queue.push([node.right,level+1]);
}
return res[res.length-1][0];
};
112. 路径总和
解题思路
代码实现
var hasPathSum = function(root, targetSum) {
if(!root){
return false;
}
var isSame = false;
var dfs = function(root,sum){
console.log(root.val,sum)
if(!root.left && !root.right){
console.log(root.val,sum,targetSum);
sum += root.val;
if(sum === targetSum){
isSame = true;
}
}else{
if(root.left) dfs(root.left,sum+root.val);
if(root.right) dfs(root.right,sum+root.val);
}
}
dfs(root,0);
if(isSame===true){
return true;
}else{
return false;
}
};
113. 路径总和
解题思路
代码实现
var pathSum = function(root, targetSum) {
var res =[];
if(!root) return res;
var dfs = function(root,path,sum){
if(!root.left && !root.right){
path.push(root.val);
if(sum + root.val ===targetSum){
res.push(path);
path=[];
}
}else{
if(root.left) dfs(root.left,path.concat(root.val),sum + root.val);
if(root.right) dfs(root.right,path.concat(root.val),sum + root.val);
}
}
dfs(root,[],0);
return res;
};
106.从中序与后序遍历序列构造二叉树
解题思路
首先回忆一下如何根据两个顺序构造一个唯一的二叉树,相信理论知识大家应该都清楚,就是以 后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。一层一层切下去,每次后序数组最后一个元素就是节点元素。
如果让我们肉眼看两个序列,画一棵二叉树的话,应该分分钟都可以画出来。
代码实现
var buildTree = function(inorder, postorder) {
if(!postorder.length) return null;
var node = postorder.pop();
var index = inorder.indexOf(node);
const rootNode = new TreeNode(node);
rootNode.left = buildTree(inorder.slice(0,index),postorder.slice(0,index));
rootNode.right = buildTree(inorder.slice(index+1),postorder.slice(index));
return rootNode;
};