二叉树part04
1.平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
输入:root = [3,9,20,null,null,15,7]
输出:true
var isBalanced = function(root) {
return depth(root) != -1;
};
var depth = function(root){
if(root == null){
return 0;
}
let leftdepth = depth(root.left); //左
if(leftdepth == -1){
return -1;
}
let rightdepth = depth(root.right);//右
if(rightdepth == -1){
return -1;
}
let result = 0;
if(Math.abs(leftdepth-rightdepth) <= 1){
result = Math.max(leftdepth,rightdepth) + 1; //中
}else{
result = -1;
}
return result;
}
2.二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]
var binaryTreePaths = function(root) {
let arr = [];
let result = [];
treePaths(root,arr,result);
return result;
};
var treePaths = function(root,arr,result){
arr.push(root.val);
if(root.left == null && root.right == null){
result.push(arr.join("->"));
console.log(result);
return;
}
if(root.left != null){
treePaths(root.left,arr,result);
arr.pop();
}
if(root.right != null){
treePaths(root.right,arr,result);
arr.pop();
}
}
3.左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。
输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
var sumOfLeftLeaves = function(root) {
return sumOfLeft(root);
};
var sumOfLeft = function(root){
if(root == null){
return 0;
}
let sum1 = sumOfLeft(root.left);
if(root.left != null && root.left.left == null && root.left.right == null){
// arr.push(root.left.val);
sum1 = root.left.val
}
let sum2 = sumOfLeft(root.right);
let sum = sum1 + sum2;
return sum;
}