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;
}
发布了61 篇原创文章 · 获赞 6 · 访问量 5725

猜你喜欢

转载自blog.csdn.net/Do_________/article/details/104221036