1. 程式人生 > >C語言二叉樹的深度

C語言二叉樹的深度

6-8 求二叉樹高度 (20 point(s))

本題要求給定二叉樹的高度。

函式介面定義:

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

 

如果樹為空,那麼高度為0

如果根節點沒有左右孩子,那麼樹的高度為1

否則,遞迴求左子數和右子數的高度,然後總高度等於1+max(depthR,depthL)

#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;
}
/* 你的程式碼將被嵌在這裡 */
int GetHeight(BinTree BT)
{
	int depthL;              // 左子數深度
	int depthR;              // 右子數深度
	if (BT == NULL)
		return 0;
	if (BT->Left == NULL && BT->Right == NULL)
		return 1;
	depthL = GetHeight(BT->Left);
	depthR = GetHeight(BT->Right);
	if (depthL > depthR)
		return 1 + depthL;
	else
		return 1 + depthR;

}