本题要求给定二叉树的高度。
函数接口定义:
int GetHeight( BinTree BT );
其中BinTree结构定义如下:
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
要求函数返回给定二叉树BT的高度值。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree(); /* 实现细节忽略 */
int GetHeight( BinTree BT );
int main()
{
BinTree BT = CreatBinTree();
printf("%d\n", GetHeight(BT));
return 0;
}
/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
4
首先讲非递归的代码,非递归的代码基于二叉树的层次遍历,所以二叉树的层次遍历非递归代码要很熟悉,可以用来灵活解决很多问题!
int GetHeight( BinTree BT ){
if(BT==NULL){
return 0;
}
int height = 0;
int count = 0; //当前层中已经遍历的节点数
int nextCount = 1;//当前层数节点数量
BinTree a[100];
int front =0;
int rear = 0;
a[rear++] = BT;
while(front<rear){
count++;
BinTree p = a[front++];
if(p->Left){
a[rear++] = p->Left;
}
if(p->Right){
a[rear++] = p->Right;
}
if(count==nextCount){ //和层次遍历的差别主要在这。
height++;
nextCount = rear-front;//下一层的节点总数
count = 0;
}
}
return height;
}
递归的方法
int GetHeight( BinTree BT ){
if(BT==NULL) return 0;
int l,r;
l = GetHeight(BT->Left);
r = GetHeight(BT->Right);
return (l>=r?l:r)+1;
}