【题目】
平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1。给定一棵二叉树的头结点head,判断这棵二叉树是否为平衡二叉树。
【要求】
如果二叉树的节点数为N,要求时间复杂度为O(N)
【代码】
//判断二叉树是否为二叉树
public boolean isBalance(Node head){
boolean[] res=new boolean[1];
res[0]=true;
getHeight(head,1,res);
return res[0];
}
//获取子树高度
private int getHeight(Node head, int level, boolean[] res) {
if(head==null){
return level;
}
int lH=getHeight(head.leftNode,level+1,res);//求左子树高度
if(!res[0]){//求左子树高度的过程中,发现不平衡,此函数立即返回,递归过程结束,此时返回什么根本不重要
return level;
}
int rH=getHeight(head.rightNode,level+1,res);
if(!res[0]){
return level;
}
if(Math.abs(lH-rH)>1){//左右子树都平衡,比较高度差
res[0]=false;
}
return Math.max(lH, rH);
}