平衡二叉树的高度的计算
描述
假设一棵平衡二叉树的每个结点都标明了平衡因子b,设计一个算法,求平衡二叉树的高度。
输入
多组数据,每组数据一行,为平衡二叉树的先序序列。输入的数字为该节点的平衡因子。当序列为“#”时,输入结束。
输出
每组数据输出一行,为平衡二叉树的高度。
样例输入1
110###0## 1110###0##10### #
样例输出1
3 4
解答:根据输入字符串创建二叉树,递归求出二叉树的高度。
#include<stdio.h>
#include<stdlib.h>
#define maxn 200
typedef struct node
{
char data;
struct node *left,*right;
} TNode;
int k;
char s[maxn];
void Create(TNode *&T)
{
k++;
if(s[k]=='#')
T=NULL;
else
{
T=(TNode *)malloc(sizeof(TNode));
T->data=s[k];
Create(T->left);
Create(T->right);
}
}
int GetHeight(TNode *T)
{
if(!T)
return 0;
int LH=GetHeight(T->left);
int RH=GetHeight(T->right);
return LH>RH?LH+1:RH+1;
}
int main()
{
TNode *T;
while(1)
{
scanf("%s",s);
if(s[0]=='#' && s[1]=='\0')
break;
k=-1;
Create(T);
printf("%d\n",GetHeight(T));
}
return 0;
}