查找二叉树(tree_a)

已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点。例:如图二叉树的数据文件的数据格式如下:


输入

第一行n为二叉树的结点个树,n<=100;第二行x表示要查找的结点的值;以下第一列数据是各结点的值,第二列数据是左儿子结点编号,第三列数据是右儿子结点编号。输出
一个数即查找的结点编号。输入样例
7
15
5 2 3
12 4 5
10 0 0
29 0 0
15 6 7
8 0 0
23 0 0

输出样例

4

题解

查找树的根结点,没有在子树中出现的编号为树根的编号,中序遍历,顺序查找

#include<iostream>
using namespace std;
const int Maxn=110;
int ls[Maxn],rs[Maxn],node[Maxn],inor[Maxn],tot=0;
bool vis[Maxn];
void in(int i)
{
	if (!i) return ;
	in(ls[i]);
	inor[++tot]=node[i];
	in(rs[i]);
}
int main() 
{
	int n;
	cin>>n;
	int val;
	cin>>val;
	for (int i=1;i<=n;i++)
	{
		cin>>node[i]>>ls[i]>>rs[i];
		vis[ls[i]]=vis[rs[i]]=true;//标记在子树中出现的编号
	}
	for (int i=1;i<=n;i++)//找树根
	{
		if (!vis[i])
		{
			in(i);//中序遍历
		}
	}
	for (int i=1;i<=n;i++)//顺序查找
	{
		if (inor[i]==val)
		{
			cout<<i<<endl;
			return 0;
		}
	}
	return 0;
}
posted @ 2022-03-03 08:09  心悟&&星际  阅读(152)  评论(0编辑  收藏  举报