1370: 高度平衡的二叉树(二叉树)

题目描述

给定一个二叉树,判断它是否是高度平衡的二叉树。 
一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。 

输入

输入一行,按照先序输入一棵二叉树,其中空节点用 -1 表示。

输出

若是则输出YES,否则输出NO。

样例输入

1 2 -1 -1 3 4 -1 -1 -1

样例输出

YES
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct BiNode{
	int data;
    struct BiNode *lchild;
	struct BiNode *rchild;	
}*BiTree;
//创建二叉树 
void CreateTree(BiTree &T){
	int data;
	scanf("%d",&data);
	if(cin.get()!='\n'){
		if(data==-1){
			T=NULL;
		}else{
			T=(BiTree)malloc(sizeof(BiNode));
			T->data=data;
			CreateTree(T->lchild);
			CreateTree(T->rchild);
		}
	}
}
// 判断二叉树T是否为平衡二叉树:左右子树是平衡二叉树,平衡平衡因子为-1或者0或者1,d表示T树的高度 
int JudgebalancedBiTree(BiTree T, int& d) {//【注】d的引用,及该函数的调用. 
	if(T==NULL) {	// 空树 
		d = 0;		// 高度为1 
		return 1;	// 是平衡二叉树 
	} 
	int ld, rd;	
	if(!JudgebalancedBiTree(T->lchild, ld)) return 0;	// 判断左子树不是平衡二叉树,并得到其高度 
	if(!JudgebalancedBiTree(T->rchild, rd)) return 0;
	d = (ld>rd?ld:rd)+1;	// 【注】计算T的高度,d采用引用(拿到左子树的高度,拿到右子树的高度) 
	return abs(ld-rd)<=1;	// 到这里表示左右子树已经平衡,只要判断平衡平衡因子是否为-1, 0, 1 
} 
int main(void){
	BiTree T;
	CreateTree(T);
	if(JudgebalancedBiTree(T,0)==0){
		printf("NO");
	}else{
		printf("YES"); 
	}
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值