二叉树(给出二个儿子)

题目1:给出左右子树,然后前序遍历

题目描述

输入一串二叉树,输出其前序遍历。

输入格式

第一行为二叉树的节点数 n。(1≤n≤26)

后面 n 行,每一个字母为节点,后两个字母分别为其左右儿子。

空节点用 * 表示

输出格式

二叉树的前序遍历。

输入输出样例

输入 #1复制

6
abc
bdi
cj*
d**
i**
j**

输出 #1复制

abdicj

题解:这是一个简单的二叉树问题

设立一个结构体存储左右儿子,然后用递归遍历一下左右儿子就可以了,实现前序输出的排版。

代码如下

#include"cstdio" 
#include"iostream"
using namespace std;
struct node{
	char lr;
	char rr;//左儿子,右儿子 
}tree[300];
void pri(char s)//前序遍历
{
	if(s=='*')
	return ;
	if(s!='*')
	printf("%c",s);
	pri(tree[s].lr);
	pri(tree[s].rr);
}
int main()
{
	int n,m;
	char c,root;
	scanf("%d",&n);
	cin>>root;//确定根结点 
	cin>>tree[root].lr;
	cin>>tree[root].rr;
	for(m=2;m<=n;m++)
	{
		cin>>c;
		cin>>tree[c].lr;
		cin>>tree[c].rr;
	}
	pri(root);
	return 0;
}

题目2:给出两个儿子,求二叉树深度

题目描述

给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 1),如果是叶子节点,则输入0 0。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。

最多有 10^6 个结点。

输入格式

输出格式

输入输出样例

输入 #1复制

7
2 7
3 6
4 5
0 0
0 0
0 0
0 0

输出 #1复制

4

题解:

1.设立一个结构体存储左右儿子,然后用递归遍历一下左右儿子就可以了,在题目1的基础上要加上度的叠加。

2.每走到儿子一次就深度就加一,再设置一个全局变量记录一下ans最大深度的值。

代码如下

#include"stdio.h"
int max=0;
int n;
struct node{
	int l;
	int r;
}x[1000009];
int ax(int a,int  b)
{
	if(a>b)
	return a;
	else
	return b;
}
void dfs(int m,int step)
{
	if(m==0)//该结点数为0,就意味着结点不存在 
	return;
	max=ax(max,step);
	dfs(x[m].l,step+1);
	dfs(x[m].r,step+1);
}
int main()
{
	int m;
	scanf("%d",&n);
	for(m=1;m<=n;m++)
	scanf("%d%d",&x[m].l,&x[m].r);
	dfs(1,1);
	printf("%d",max);
	return 0;	
} 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值