C语言递归实现二叉树的深度求解

本文介绍了一种利用递归方法计算二叉树深度的实现方式,通过定义二叉树结构、创建二叉树、计算二叉树深度及释放树节点等步骤,详细阐述了递归算法的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归实现二叉树的深度求解:

        代码解释:

//先定义两个变量,初始化为0 int ld=0,int rd=0;分别表示左子树和右子树的深度;
//先判断二叉树bt是否为空,为空直接return返回;
//不为空,进入左子树的递归调用,此时ld=1,一直到某个结点的左子树为空,if条件不成立,返回上一层递归调用;
//之后进入右子树的递归调用,再进入这个结点的左子树一直到左子树为空,返回上一层递归调用,继续进入右子树的递归调用;
//一直循环判断使用哪个递归调用;
//一直到某个结点的左右子树为空,返回ld和rd的最大值,并将所带回的值+1,重新赋给ld或者rd;
//重复上述过程,直到根结点,说明bt为空,无法继续返回,所以结束调用函数;
//返回main函数带回一个整型的值;

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

typedef struct tree    
{
	char ch;
	struct tree *lchild;
	struct tree *rchild;
}BitTree;

BitTree *CreateTree()  //创建树;
{
	BitTree *bt;
	char str;
	scanf("%c",&str);
	if(str=='#')
		return NULL;
	else
	{
		bt=(BitTree *)malloc(sizeof(BitTree));
		bt->ch=str;
		bt->lchild=CreateTree();
		bt->rchild=CreateTree();
		return bt;
	}
}

//求二叉树的深度,递归实现;
int DeepOrder(BitTree *bt)
{
    int ld=0,rd=0;
    if(bt)
	{
		//先找到最左边的左右孩子为空的结点,之后找到相对位置靠近第一个结点的结点,依次类推;
        ld=DeepOrder(bt->lchild)+1;
        rd=DeepOrder(bt->rchild)+1;  
    }
    return ld>=rd?ld:rd;  
}

//释放树的结点;
void DestroyTree(BitTree *bt)
{
	if(bt)
	{
		DestroyTree(bt->lchild);
		DestroyTree(bt->rchild);
		free(bt);
	}
}

int main(void)
{
	BitTree *bt;
	printf("请以先序输入二叉树(#表示该结点的子结点为空):\n");
	bt=CreateTree();

	int deep=DeepOrder(bt);
	printf("\n二叉树的深度为:  %d\n",deep);

	printf("\n");
	DestroyTree(bt);  //释放树结点;
	return 0;
}

//代码截图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值