程序员面试题精选100题(60)-判断二叉树是不是平衡的

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
[code]

int getHeight(Node node){
if(node==null){
return 0;
}
int heigth = 1;
if(node.left!=null){
height = 1+getHeight(node.left);
}
if(node.rigth!=null){
int h = 1+getHeight(node.right);
height = height>h?height:h;
}
return height;
}

boolean isBalance(Node node){
if(node==null){
return true;
}
int left = getHeight(node.left);
int right = getHeight(node.right);
int diff = left - right;
if(diff > 1 || diff < -1)
return false;
return isBalance(node.left)&&isBalance(node.right);
}
[/code]

我们用后序遍历的方式遍历二叉树的每一个结点,在遍历到一个结点之前我们已经遍历了它的左右子树。只要在遍历每个结点的时候记录它的深度(某一结点的深度等于它到叶节点的路径的长度),我们就可以一边遍历一边判断每个结点是不是平衡的

[code]

boolean isBalance(Node node,Depth d){
if(node==null){
d.height=0;
return true;
}
Depth right=new Depth();
depth left = new Depth();
if(isBalance(node.left,left)&&isBalance(node.right,right)){
int diff = left.height-right.height;
if(diff<=1||diff>=-1){//绝对值小于等于1
//如果是平衡树,才有必要算深度,然后看上级是不是平衡树
d.height=left.height>right.height?left.height:right.height;
return true
}
}
return false;
}

[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值