平衡二叉树的定义
根节点的左子树与右子树的高度差不能超过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 falseelse 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)
