算法练习-day19求二叉树的深度

题目:求二叉树的深度

输入一颗二叉树,求该树的深度。从根节点到叶节点依次经过的结点(含根,叶节点)形成数的一条路径,
最长路径的长度为树的深度,根节点的深度视为1

思路

二叉树有深度和高度两个属性,一个节点的深度指的是从根节点到该节点路径的长度,根节点的深度为1;一个节点的高度指的是从该节点到叶子节点所有路径上包含节点个数的最大值。叶子节点的高度为1,往上节点的高度依次递增。所以要求二叉树的深度,我们要求出从根节点到叶子结点最长路径的长度,从根节点到所有的叶子结点,实际就是在遍历这棵树。

然后,为了得到从根节点到叶子结点路径的长度,我们从根节点出发,进行深度优先遍历,当遍历到一个叶子结点时,就计算出了一条路径的长度,这时返回到上一层,即叶子结点的父亲节点,继续对另一颗子树进行深度优先遍历,计算其他路径的长度

算法实现

#include <stdio.h>
#include <malloc.h>
typedef struct BiTNode
{
	char data;  //结点的数据域
	struct BiTNode* lchild, * rchild; //指向左孩子和右孩子
} BiTNode, * BiTree;

//创建一棵二叉树
void CreatBiTree(BiTree* T)
{

	char c;
	scanf("%c", &c);
	if (c == '#')
		*T = NULL;
	else
	{
		*T = (BiTNode*)malloc(sizeof(BiTNode)); //创建根结点
		(*T)->data = c; //向根结点中输入数据
		CreatBiTree(&((*T)->lchild)); //递归地创建左子树
		CreatBiTree(&((*T)->rchild)); //递归地创建右子树
	}
}

//计算二叉树的深度
int getBitreeDepth(BiTree T)
{
	int leftHeight, rightHeight, maxHeight;//左子树,右子树,最大深度
	if (T != NULL) //如果为空树
	{
		leftHeight = getBitreeDepth(T->lchild);//左子树深度
		rightHeight = getBitreeDepth(T->rchild);//右子树深度
		maxHeight = leftHeight > rightHeight ? leftHeight : rightHeight;//最大深度
		return maxHeight + 1;//二叉树深度=最大深度+1
	}
	else
	{
		return 0;
	}
}

void main()
{
	BiTree T = NULL; //最开始T指向空
	printf("请您输入一个二叉树(以#为空子树):\n");
	CreatBiTree(&T); //创建二叉树
	printf("\n二叉树的深度为%d\n", getBitreeDepth(T));
	
}

示例

在这里插入图片描述

总结

该题就是二叉树的基本操作,把相关细节弄熟了就好写了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值