(c语言)求解二叉树的高度(包含测试源码)

本实验取材于浙江大学《数据结构》.
我们知道一棵二叉树的高度是其根结点的高度,而根的结点的高度则是其左子树的高度和右子树高度两者中最大值加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的构造!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值