递归判断二叉树是否是平衡二叉树的算法

代码讲解:https://www.bilibili.com/video/BV1Ga4y1J7hx/
平衡二叉树的要点:
①左子树平衡
②右子树平衡
③左右子树高度差绝对值不超过1

掌握这三个要点就可以开始写递归程序的出入口
出口①:空树,则高度为0,平衡因子为1
出口②:只有根节点,高度为1,平衡因子为1
出口③:递归完左右子树以后,得到左右子树的平衡因子,判断平衡因子是否都为1(即都平衡,都平衡则以当前节点为根的树都平衡),把当前树的高度保存在h变量中,结束这一层的递归算法。
入口①:递归左子树
入口②:递归右子树

void Judge_AVL(BiTree bt, int &balance, int &h){
//参数加了引用符,改变变量的值会改变上层调用算法时的变量的值
	int bl = 0,br = 0, hl = 0, hr = 0;
	if(bt==NULL){
		h = 0;
		balance = 1;//空树的平衡因子为1
	}else if(bt->lchild==NULL&&bt->rchild==NULL){
		h=1;//只有根节点,高度为1
		balance=1;
	}else{
		Judge_AVL(bt->lchild,bl,hl);//递归左子树
		Judge_AVL(bt->rchild,br,hr);//递归右子树
		h=(h1>hr?hl:hr)+1;
		if(abs(hl-hr)<2)//左右高度差绝对值小于1
			balance=bl&&br;//当左右子树都平衡时,则以当前节点为根节点的树也平衡
		else
			banance = 0;
	}
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值