本实验取材于浙江大学《数据结构》.
我们知道一棵二叉树的高度是其根结点的高度,而根的结点的高度则是其左子树的高度和右子树高度两者中最大值加1。因此可采用二叉树遍历的原理,递归地计算出二叉树的高度。
//二叉树的高度进行求解
//叶节点输出
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//树的层序遍历--采用队列模型
//设置一个队列结构,遍历从根节点开始,首先将根节点指针入队,然后开始执行下面三个操作:
//1、从队列中取出一个元素;
//2、访问该元素所指结点;
//3、若该元素所指结点的左右孩子结点非空,则将其左、右孩子的指针顺序入队
//不断执行这三部操作,直到队列为空,再无元素可取,二叉树的程序遍历就完成了。
#define ERROR -1
#define MaxSizel 10
//typedef struct SNode *PtrToSNode;
typedef int ElementType;
typedef struct TNode *Position;
typedef Position BinTree; /* 二叉树类型 */
struct TNode{ /* 树结点定义 */
ElementType Data; /* 结点数据 */
BinTree Left; /* 指向左子树 */
BinTree Right; /* 指向右子树 */
};
int GetHeight(BinTree BT){
int HL,HR,MaxH;
if(BT){
HL = GetHeight(BT->Left);//递归求左子树的高度
HR = GetHeight(BT->Right);//递归求右子树的高度
MaxH = HL > HR ? HL:HR;//取左右子树较大的高度
return (MaxH+1);//返回树的高度
}
else return 0;
}
int main()
{
BinTree Bt = (BinTree)malloc(sizeof(struct TNode));
BinTree Bt1 = (BinTree)malloc(sizeof(struct TNode));
BinTree Bt2 = (BinTree)malloc(sizeof(struct TNode));
BinTree Bt3 = (BinTree)malloc(sizeof(struct TNode));
BinTree Bt4 = (BinTree)malloc(sizeof(struct TNode));
BinTree Bt5 = (BinTree)malloc(sizeof(struct TNode));
BinTree Bt6 = (BinTree)malloc(sizeof(struct TNode));
Bt->Data = 1;
Bt1->Data=2;
Bt2->Data=3;
Bt3->Data=4;
Bt4->Data=5;
Bt5->Data=6;
Bt6->Data=7;
Bt->Left = Bt1;
Bt->Right = Bt2;
Bt1->Left = Bt3;
Bt1->Right = Bt4;
Bt2->Left = Bt5;
Bt2->Right = Bt6;
Bt3->Left = NULL;
Bt3->Right = NULL;
Bt4->Left = NULL;
Bt4->Right = NULL;
Bt5->Left = NULL;
Bt5->Right = NULL;
Bt6->Left = NULL;
Bt6->Right = NULL;
printf("max tree height:%d ",GetHeight(Bt));
printf("\n");
return 0;
}
这是int main的构造!