`
bcyy
  • 浏览: 1824313 次
文章分类
社区版块
存档分类
最新评论

求二叉树高度

 
阅读更多

因为树是递归定义的,所以用递归算法很方便。

#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;
} // CreateBiTree

void 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:
A
B
C
#
#
D
E
#
G
#
#
F
#
#
#
*/

构造的树:

输出为5。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics