[刷题之旅no23]P4913 【深基16.例3】二叉树深度

博客作者通过解决一道关于求解二叉树深度的问题,探讨了如何确定合适的数据结构和使用深度优先搜索(DFS)算法。在过程中遇到了理解题意的困扰,最终发现关键在于理解0表示无子节点。通过修正代码,作者找到了正确的解决方案,并分享了他们的学习心得和代码实现。
摘要由CSDN通过智能技术生成

求解二叉树深度…这样太。。刚才我做的题中就有啊
好吧,还是有点难度的,毕竟这道题的输入数据很。人性化。
也就是说规则有点模糊?我们还是想办法确定一下数据结构好了。
特殊点
1.只要有儿子,必定有两个
2.从左到右给儿子
3.如果是0没儿子
难点:确定合适数据结构储存输入数据
用队列!
因为他的子节点是按照顺序给的,
从上到下,从左到右,
所以先到先得,我们只需要使用一个队列,
让非0结点入队即可。
而且不断更新grade数组的值
好的,当前80分,有一道题出错了,我需要猜想我的逻辑不全面的地方
到底是怎样的偏怪数据会造成这样的错误呢?
1.改正,grade[head]没有任何意义,但是没想到拿了80分?
grade[a]=grade[line[head]]+1;
grade[b]=grade[line[head]]+1;
改正之后0分?
完全没问题啊?
难不成我题意理解有问题?万万没想到啊?
查看题解,我就这样了,有点生气,题意描述的是不是有点不清楚啊
果然是我理解错题意了,果然还是不要浪费时间比较好
气死了
这道题的输入数据:
1.一个整数,结点总数量
2.n行,分别表示编号1到n结点的子节点数
那直接深搜就好了,呵呵
不过感觉我这样理解也可以用来出一道题了哈哈。
用一个结构体数组,下标就是结点编号,然后内部就是左右字节点编号,最后直接从1结点深搜即可。没劲。。
好吧,我用dfs(1,1)竟然最后的出来是5,看来又有逻辑出现错误?
没错误,合着又是我理解错了????????
原来0代表的是没有儿子,而不是不可以有儿子的叶节点啊!
哈哈哈哈哈
自闭
上代码

#include<stdio.h>
typedef struct
{
	int l,r;
}Tree;
Tree tree[1000005];
int n,depth=0;
void dfs(int node,int dep);
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d %d",&tree[i].l,&tree[i].r);
	}
	//深搜
	dfs(1,1);
	printf("%d",depth);
	return 0;
}

void dfs(int node,int dep)
{
//	printf("node=%d,dep=%d\n",node,dep);
	//每次结点等于0的时候说明到底了,进行比较之后返回即可
	if(node==0)
	{
		return ;
	}
	if(dep>depth)
	{
		depth=dep;
	}
	dfs(tree[node].l,dep+1);
	dfs(tree[node].r,dep+1);
	return ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值