#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct BitNode
{
int data;
struct BitNode *lc,*rc;
}BitNode;
typedef BitNode* Bitree;
//递归查找
int search_bstree(Bitree t,int key,Bitree f,Bitree *p)
{
if(!t)//空树不用查
{
*p=f;
return 0;
}
else if(key==t->data)
{
*p=t;
return 1;
}
else if(key<t->data)
{
//如果需要查找的元素小于当前结点,向左子树进行搜索
return search_bstree(t->lc,key,t,p);
}
else
{
//如果需要查找的元素大于当前结点,向右子树进行搜索
return search_bstree(t->rc,key,t,p);
}
}
//插入函数 还是采用递归插入的方法
Bitree tree_insert(Bitree t,int key)
{
if(t==NULL)
{
t=new BitNode();
t->lc=NULL;
t->rc=NULL;
t->data=key;
return t;
}
//递归插入即可
if(t->data>key) t->lc=tree_insert(t->lc,key);
else t->rc=tree_insert(t->rc,key);
return t;
}
//创建二叉树
Bitree Create_Tree(Bitree t,int d[],int n)
{
for(int i=0;i<n;i++) t=tree_insert(t,d[i]);
return t;
}
//中序遍历
void inorder(Bitree t)
{
if(t)
{
inorder(t->lc);
cout<<t->data<<" ";
inorder(t->rc);
}
//cout<<endl;
}
int main()
{
Bitree tree=NULL;
int data[]={5, 3, 7, 2, 4, 6, 8};
int n=sizeof(data)/sizeof(data[0]);
tree=Create_Tree(tree,data,n);
cout<<"中序遍历的结果为:";
inorder(tree);
cout<<endl;
Bitree foundNode;
int search_data=4;
if(search_bstree(tree,search_data,NULL,&foundNode))
{
cout<<"已成功找到该元素"<<search_data;
}
else
{
cout<<"在树中没有找到该元素!"<<endl;
}
return 0;
}
二叉排序树实现动态查找
于 2024-08-08 23:21:21 首次发布