时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
热度指数:336552
本题知识点: 树
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
代码
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function IsBalanced_Solution(pRoot){
//1、平衡二叉树是一棵空树,
//2、或者左右子树的高度之差不大于1,
//3、子树必须是一颗平衡二叉树。
if(pRoot == null) {return true;}
if(Math.abs(treeDepth(pRoot.left) - treeDepth(pRoot.right)) > 1) {return false;}
return true;
}
function treeDepth(root){
if(root === null) {return 0;}
let leftDepth = treeDepth(root.left);
let rightDepth = treeDepth(root.right);
return Math.max(leftDepth, rightDepth) + 1;
}
分析:
平衡二叉树: 任意节点的子树的高度差都小于等于1。如B树(多路平衡搜索树)、AVL树(二叉平衡搜索树)。