
/*
以孩子兄弟链表为存储结构,请设计递归算法求树的高度
分析:
如果只有根节点,那么高度为1,如果有左孩子,那么高度由左孩子的左子树和右子树决定,取其大者。
*/
typedef struct node {
char data;
node *fch, *nsib;
}Tree;
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
Tree *create(Tree *T) {//先序创建一颗二叉树
char data;
printf("请输入当前节点值:data=");
scanf("%c", &data);
getchar();
if (data != '#') {
T = (Tree *)malloc(sizeof(Tree));
T->data = data;
T->fch = NULL;
T->nsib = NULL;
T->fch = create(T->fch);
T->nsib = create(T->nsib);
}
return T;
}
int getHigh(Tree *T) {
int lhigh, rhigh;
if (!T) {//空返回当前高度,这是递归的出口
return 0;
}
else {
lhigh = getHigh(T->fch);//记录左子树高度
rhigh = getHigh(T->nsib);//记录右兄弟的高度,注意这里high不能再加一,因为他们是兄弟,平级
if (lhigh + 1 > rhigh) {
return lhigh + 1;
}
else {
return rhigh;
}
}
}
int main() {
Tree *T = (Tree *)malloc(sizeof(Tree *));
T = create(T);
int high = 0;
high = getHigh(T);
printf("树的高度为:%d", high);
return 0;
}