判断二叉树是否平衡

法一

public class isAVLTree{
	public static boolean isBalance(BSTNode node){
		if(node==null)return false;
		int min=getHeight(node.left)-getHeight(node.right);//左右子树高度差
		return Math.abs(min)>1||isBalance(node.left)||isBalance(node.right);
	}
	public static int getHeight(BSTNode node){
		if(node==null)return 0;//递归出口
		int lHeight=getHeight(node.left)+1;//递归求左子树高度
		int rHeight=geitHeight(node.right)+1;//求右子高度
		return Math.max(lHeight,rHeight);//返回最大的那个
	}
}

法二

public class isBalance(BSTNode node){
	return isBalance(node,new HashMap<BSTNode,Integer>heightMap);
}
public class isBalance(BSTNode node,HashMap<BSTNode,Integer>heightMap){
	if(node==null||(node.left==null&&node.right==null))return false;//根节点为空或左右子树都不存在
	boolean b=Math.abs(heightOf(node.left,heightMap)-heightOf(node.right,heightMap))<=1;//高度差不大于1
	return b&&isBalance(node.left)&&isBalance(node.right);
}
public int heightOf(BSTNode node,HashMap<BSTNode,Integer>heightMap){
		if(node==null)return 0;
		Integer height=heightMap.get(node);
		if(height!=null)return height;//获得到height则返回
		if(node.left==null&&node.right==null){
			heightMap.put(node,1);//存储节点和其对应的高度
		}
		else if(node.left==null){
			heightMap.put(node,1+heightOf(node.right,heightMap));//右边递归
		}else if(node.right==null){
			heightMap.put(node,1+heightOf(node.left,heightMap));//左边递归
		}else{
			heightMap.put(node,Math.max(heightOf(node.left,heightMap),heightOf(node.right,heightMap)))//左右子树都存在,则取最大的那个;
		}
		return heightMap.get(node);//返回node对应的高度
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏之翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值