C实现:求二叉树的高度

理论思路

在这里插入图片描述
(图来自浙大数据结构课程)

很明显,求树的高度,是左右子树中最高的再加一。
那么怎么求左子树的高度呢?就是其左右子树中最高的加一。
那么怎么求右子树的高度呢?就是其左右子树中最高的加一。

这样就形成了 递归,我们利用后序遍历的程序,稍加修改便可成为求二叉树高度的程序。

求二叉树高度:

int PostOrderGetHeight(BinTree BT){
	int HL,HR,MaxH;
	if(BT){
		HL=PostOrderGetHeight(BT->Left);
		HR=PostOrderGetHeight(BT->Right);
		MaxH=HL > HR ? HL : HR;
		return (MaxH+1);
	}else{
		return 0;
	}
}

理解:
碰到叶子节点时,HL和HR的值都为0,最后返回时,叶子节点的高度就是1。
然后将这个高度原路返回给父节点的HL或者HR。

 

C代码实现

1.利用前序遍历思想创建二叉树
2.求二叉树的高度

#include <stdio.h>
#include <stdlib.h>

typedef char DataType;

typedef struct Node *BinTree;
typedef BinTree NodeLink;
typedef struct Node TreeNode;

struct Node{
	DataType data;
	NodeLink Left,Right;
};

void creat_BinTree(BinTree *T){
	char ch;
	scanf("%c",&ch);
	
	if(ch=='#'){
		*T=NULL;
	}else{
		*T=(TreeNode*)malloc(sizeof(TreeNode));
		(*T)->data=ch;
		(*T)->Left=NULL;
		(*T)->Right=NULL;
		
		creat_BinTree(&((*T)->Left));
		creat_BinTree(&((*T)->Right));
	}
} 

int PostOrderGetHeight(BinTree BT){
	int HL,HR,MaxH;
	if(BT){
		HL=PostOrderGetHeight(BT->Left);
		HR=PostOrderGetHeight(BT->Right);
		MaxH=HL > HR ? HL : HR;
		return (MaxH+1);
	}else{
		return 0;
	}
} 

int main(int argc, char *argv[]) {
	BinTree Tree;
	creat_BinTree(&Tree);
	int h=PostOrderGetHeight(Tree);
	printf("树的高度:%d",h);
	return 0;
}

二叉树如下:
在这里插入图片描述
在这里插入图片描述

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值