题目描述
已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为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>
#include <cstring>
using namespace std;
struct node
{
int vessel,left,right;
}tree[1100];//用来储存二叉树以及每个结点中的数字。
int sum=0;
bool pdm(int,int);
int main()
{
int n,x;
cin>>n>>x;
memset(tree,0,sizeof(tree));
for(int i=1;i<=n;i++)
cin>>tree[i].vessel>>tree[i].left>>tree[i].right;
if(pdm(1,x))
{
cout<<sum;
}
else
{
cout<<0;
}
return 0;
}
bool pdm(int right,int x)//用中序遍历,找到与x同值的结点。
{
if(tree[right].left!=0)//从左开始遍历
if(pdm(tree[right].left,x))
return true;
sum++;//记录结点数。
if(tree[right].vessel==x)
return true;
if(tree[right].right!=0)//再去右边遍历。
if(pdm(tree[right].right,x))
return true;
return false;
}