110.平衡二叉树
解题思路
求二叉树的高度,用后序遍历
平衡二叉树即:每个节点的左右子树的高度差不能大于1
代码实现
var isBalanced = function(root) {
var getHeight = function(root){
if(!root) { return 0;}
var leftH = (root.left && getHeight(root.left)) || 0;
if(leftH === -1){
return -1;
}
var rightH = (root.right && getHeight(root.right)) || 0;
if(rightH === -1){
return -1;
}
if(Math.abs(leftH - rightH) > 1){
return -1;
}else{
return 1 + Math.max(leftH,rightH);
}
}
var h = getHeight(root);
if(h === -1){
return false;
}else{
return true;
}
};
257. 二叉树的所有路径
解题思路
求到叶子结点的路径,用前序遍历
代码实现
var binaryTreePaths = function(root) {
if(!root) return [];
var result =[];
var dfs = function(root,path){
if(root){
path += root.val;
if(root && root.left === null && root.right === null){
result.push(path);
}else{
path +='->';
dfs(root.left,path);
dfs(root.right,path);
}
}
}
dfs(root,'');
return result;
};
404.左叶子之和
解题思路
求左叶子结点之和,先序遍历,找到所有的叶子节点
左叶子结点,则父级的左指针指向该叶子节点
代码实现
var sumOfLeftLeaves = function(root) {
var sum =0;
var dfs= function(bt,p){
if(bt && !bt.left && !bt.right){
p && (p.left === bt) && (sum += bt.val);
}
bt.left && dfs(bt.left,bt);
bt.right && dfs(bt.right,bt);
}
dfs(root);
return sum;
};
222.完全二叉树的节点个数
解题思路
代码实现
var countNodes = function(root) {
var sum =0;
var dfs = function(node){
if(!node) return sum;
sum+=1;
node.left && dfs(node.left);
node.right && dfs(node.right);
}
dfs(root);
return sum;
}