判断是否是平衡二叉树

利用二叉树遍历的思想编写一个判断二叉树是否是二叉平衡树的算法
    分析:
        我们可以采取后序遍历来完成该算法,因为后序遍历不会含有重复计算。
        我们对每一个节点进行判断,如果左右子树均平衡且左右子树高度差小于等于1,则该节点平衡

代码如下: 

struct Tree {
	int data;
	Tree *left, *right;
};
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
Tree *create(Tree *T) {//先序创建一颗二叉树
	int data;
	printf("请输入当前节点值:data=");
	scanf("%d", &data);
	getchar();
	if (data != -1) {
		T = (Tree *)malloc(sizeof(Tree));
		T->data = data;
		T->left = NULL;
		T->right = NULL;
		T->left = create(T->left);
		T->right = create(T->right);
	}
	return T;
}
bool isAVL(Tree *T, int *depth) {
	if (!T) {//空节点,为平衡二叉树
		*depth = 0;
		return true;
	}
	int left = 0, right = 0;
	if (isAVL(T->left, &left) && isAVL(T->right, &right)) {//判断左右子树是否为平衡二叉树
		int diff = left - right;//左右子树的高度差
		if (abs(diff) <= 1) {//满足小于等于1,那就是平衡二叉树
			*depth	= (1 + (left > right ? left : right));
			return true;
		}
	}
	return false;//前面一直未返回true,那就不是平衡二叉树
}
int main() {
	Tree *T = (Tree *)malloc(sizeof(Tree *));
	T = create(T);//创建一颗二叉树
	int depth = 0;
	isAVL(T, &depth) ? printf("是二叉平衡树"):printf("不是二叉平衡树");
	return 0;
}

 不要把时间、财力和劳动,浪费在空洞多余的话语上。永远以用心乐观的心态去拓展自我和身外的世界。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北街学长

你的鼓励使我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值