查找二叉树

题目描述

已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为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;
}

猜你喜欢

转载自blog.csdn.net/Genius_panda_ACM/article/details/81557723
今日推荐