6-8 求二叉树高度 (20 分)
本题要求给定二叉树的高度。
函数接口定义:
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
1、我最先想到的是层序遍历。建立队列queue,将根结点入队,如果根结点为空则直接返回。如果不为空,则根结点出队,高度加一,并且根结点左右孩子入队(判定是否有,有则入队)。然后根结点孩子再出队,根结点孩子的孩子入队,高度加一....以此往复循环,直到最后队列中没有元素的时候停止,返回高度。
2、递归进行左右子树高度比较 ,建议画个简图理一理光想容易乱
int GetHeight( BinTree BT )
{
int deep = 0;
if(BT)
{
int leftheight = GetHeight(BT->Left);
int rightheight = GetHeight(BT->Right);
deep = leftheight >= rightheight ? leftheight+1 : rightheight+1;
}
return deep;
}