平衡二叉树的定义
根节点的左子树与右子树的高度差不能超过1 这棵二叉树的每个子树的符合第一条
图例
图中这个就可以称为平衡二叉树
不是平衡二叉树的示意图如下
上图中 子节点b的左子树深度为2 右子树的深度为0 ,不满足条件不是一个平衡二叉树
使用代码实现
class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
let a = new Node('a');
let b = new Node('b');
let c = new Node('c');
let d = new Node('d');
let e = new Node('e');
let f = new Node('f');
let g = new Node('g');
let h = new Node('h');
let i = new Node('i');
a.left = b;
b.left = d;
d.left = h;
e.left = i;
c.left = f;
a.right = c;
c.right = g;
b.right = e;
/**
* 判断是否为平衡二叉树
* 平衡二叉的满足条件
* 根节点的左子树与右子树的高度差不能超过1
* 这棵二叉树的每个子树的符合第一条
* @param {*} root 节点
* @returns Boolean
*/
function isBalanceTree(root) {
if(!root) return true;
let letTree = getDeep(root.left)
let rightTree = getDeep(root.right)
if(Math.abs(letTree - rightTree) > 1) return false
else return isBalanceTree(root.left) && isBalanceTree(root.right);
}
/**
* 获取二叉树的深度
* @param {*} root 节点
* @returns Number 返回左右子树的最深的层数
*/
function getDeep(root) {
if(!root) return 0 ;
let leftTree = getDeep(root.left);
let rightTree = getDeep(root.right);
return Math.max(leftTree,rightTree) + 1;
}
let root = isBalanceTree(a)
console.log(root)