已知一棵二叉树用邻接表结构存储,中序查找二叉树中权值为 x 的结点,并指出该结点在中序遍历中的排列位置。
例:如图二叉树的数据文件的数据格式如下:
输入格式
第一行包含整数 n,表示二叉树的结点数,结点编号从 1 到 n。第二行包含整数 x,表示要查找的结点的权值。接下来 n 行,每行包含三个整数,用来描述一个结点。其中的第 i行的第一个整数,表示结点 i 的权值,第二个整数表示结点 i 的左儿子结点编号(为 0 表示它没有左儿子),第三个整数表示结点 i 的右儿子结点编号(为 0表示它没有右儿子)。
输出格式
输出一个整数,表示查找的结点在中序遍历中排第几个。
数据范围
1≤n≤100点的权值不超过 100,结点 1 为树的根结点,数据保证答案唯一。
输入样例:
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 N=110;
int w[N],l[N],r[N],mid[N],n,x,k=1;
void dfs(int u) //中序遍历
{if(l[u]) dfs(l[u]);mid[k++]=w[u]; //用mid数组存储中序遍历序列if(r[u]) dfs(r[u]);
}
int main()
{cin>>n;cin>>x;for(int i=1;i<=n;i++){int a,b,c;cin>>a>>b>>c;w[i]=a,l[i]=b,r[i]=c;}dfs(1); //从第一个节点遍历for(int i=1;i<=n;i++)if(mid[i]==x)cout<<i;return 0;
}