因為樹是遞迴定義的,所以用遞迴演算法很方便。
#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstdio>using namespace std;struct Node {char data;Node *lchild;Node *rchild;};void High(Node *T, int &h){if (T == NULL)h = 0;else {int left_h;High(T->lchild, left_h);int right_h;High(T->rchild, right_h);h = 1 + max(left_h, right_h);}}Node *CreateBiTree(Node *&T) { // 演算法6.4// 按先序次序輸入二叉樹中結點的值(一個字元),空白字元表示空樹,// 構造二叉鏈表表示的二叉樹T。char ch;cin >> ch;if (ch == '#')T = NULL;else {if (!(T = (Node *)malloc(sizeof(Node))))return 0;T->data = ch; // 產生根結點CreateBiTree(T->lchild); // 構造左子樹CreateBiTree(T->rchild); // 構造右子樹}return T;} // CreateBiTreevoid Free(Node *&T){if (T == NULL)return;Free(T->lchild);//T->lchild = NULL;Free(T->rchild);//T->rchild = NULL;free(T);T = NULL;}int main(int argc, char **argv){freopen("cin.txt", "r", stdin);Node *T = NULL;CreateBiTree(T);int height;High(T, height);cout << height << endl;Free(T);return 0;}/* cin.txt:ABC##DE#G##F###*/
構造的樹:
輸出為5。