C語言二叉樹的深度
阿新 • • 發佈:2018-11-16
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; }