6-1 求二叉树高度
分数 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
代码:
int GetHeight( BinTree BT)
{
if (BT == NULL)
{
return 0;
}else{
int height_l = GetHeight(BT -> Left);
int height_r = GetHeight(BT -> Right);
int max_height = (height_l>=height_r?height_l:height_r) + 1;
return max_height;
}
}
根据递归的思路:
根据先序遍历,先将二叉树先递归左数,每进入一个节点都会判断当前节点是否为空,如果为空则上一个节点是度为1或0的节点,则当前节点高度为0。返回时,递归右树。当左右树下节点都返回时判断是左树高度高还是右树高度高。