二叉排序树的查找

课程名称:数据结构

实验项目名称:查找算法的实现与分析

实验目的:

1.掌握二叉排序树的创建及查找算法(递归和非递归均可)。

实验要求:

1、    创建一棵二叉排序树,并实现对该二叉排序树的查找算法。

实验过程:

1、    输入一数据序列,根据输入的数据序列创建一棵二叉排序树(二叉链表);

2、    在已创建的二叉排序树中查找“37”和“66”两个结点,并给出相应的查询结果。

实验报告中给出创建二叉排序树和二叉排序树的查找算法代码。

实验结果:

1、输入数据序列:45,24,53,12,37,93。

2、输出二叉排序树的中序遍历序列:12,24,37,45,53,93;

3、输入要查找的数据:37, 输出查找的结果:该结点已找到。

输入要查找的数据:93, 输出查找的结果:该结点未找到。

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
typedef struct node
{
	int element;
    node *leftchild, *rightchild;
}*Bst,node;
bool Bstinsert(Bst &T,int m)        //二叉排序树插入函数 
{
	if(T==NULL)                   //空树时建立结点并插入 
	{
		T=new node;
      	T->element=m;
		T->leftchild=NULL;
		T->rightchild=NULL;
		return true;
	}
	if(m==T->element)              //递归地插入二叉排序树 
	return false;
	else if(m<T->element)
	{
		Bstinsert(T->leftchild,m);
	}
	else if(m>T->element)
	{
		Bstinsert(T->rightchild,m);
	}
}
void creat(Bst &T,int a[],int n)
{
	T=NULL;
	int i;
	for(i=0; i<n; i++)
	{
		Bstinsert(T,a[i]);
	}
	return ;
}
void traverse(Bst &T)
{
	if(T)
	{
		traverse(T->leftchild);
		cout<<T->element<<" ";
		traverse(T->rightchild);
    }
}
int find(Bst &T,int q,int &p)       //寻找二叉排序树中是否存在指定结点的函数 
{
	if(T)
	{
		if(T->element==q)
		{
			p++;
    	}
		find(T->leftchild,q,p);
		find(T->rightchild,q,p);
	}
    return p;
}

int main()
{
	Bst T;
	int n;
	cout<<"请输入二叉排序树中结点的个数:"; 
	cin>>n;
	int a[n];
	cout<<"请输入结点值:" ;
	for(int i=0; i<n; i++)
	{
		cin>>a[i];
	} 
	creat(T,a,n);
	cout<<"二叉排序树的中序遍历序列:";
	traverse(T);
	cout<<"\n"<<"输入要查找的数据:";
	int q;
	while(scanf("%d",&q)!=EOF) 
	{
		int k=0;
		if(find(T,q,k)==1)
		cout<<"该结点已找到"<<"\n";
		else
		cout<<"该结点未找到"<<"\n"; 
	}
	return 0;
}
    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/rem_little_fan_boy/article/details/79127742
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞