#include "iostream"
using namespace std;
typedef struct da
{
int num;
struct da *left,*right;
}dat,*data;
int search(data temp,int n)
{
if(temp == NULL)
return 1;
if(temp ->num == n)
{
cout<<n<<"is found!"<<endl;
return 0;
}
else
if(n > temp ->num)
return search(temp ->right,n);
else
return search(temp ->left,n);
}
void searchone(data top)
{
int n;
cout<<"enter the num of you want to search :";
cin>>n;
if(search(top,n) == 1)
cout<<n<<"is not found!"<<endl;
}
void buildone1(data &temp,int n) //将一个序列插入二叉树的递归形式
{
if(temp) //if根节点不为空
{
if(n > temp ->num) //n > temp ->num就进入右节点
buildone1(temp ->right,n);
else //n 不> temp ->num就进入左节点
buildone1(temp ->left,n);
}
else
{
temp = new dat;
temp ->num = n;
temp ->left = NULL;
temp ->right = NULL;
}
}
void buildone(data &temp,int n) //将一个序列插入排序二叉树 非递归形式
{
data temp1 = new dat; //定义一个结构空间
data temp2 = NULL;
temp1 ->num = n; //将值存入结构
temp1 ->left = NULL; //将结构的左右指针都赋空值
temp1 ->right = NULL;
if(temp == NULL) //判断谁否是根节点
temp = temp1;
else
{
temp2 = temp; //用temp2来操控排序树
while(1) //根据排序二叉树的性质进行遍历
{
if(n > temp2 ->num) //如果传入的值大于该节点的值就进入右子树
if(temp2 ->right)
temp2 = temp2 ->right; //右节点不为空temp2就往右走
else
{
temp2 ->right = temp1; //为空就将节点插入最后并且结束循环
break;
}
else //传入的值不大于该节点的值就进入左子树
if(temp2 ->left) //左节点不为空temp2就往左走
temp2 = temp2 ->left;
else
{
temp2 ->left = temp1; //左节点为空就插入并结束循环
break;
}
}
}
}
data build(int a[]) //排序二叉树的建立
{
int i;
data top = NULL; //将控制头结点的指针赋值空
for(i = 0;i < 10;i++) //利用循环建立节点构成排序树
buildone1(top,a[i]); //构成函数
return top; //返回头结点
}
int put(data top) //非递归形式的按层遍历
{
data temp = NULL;
data queue[10]; //建立一个队列
int head,tail;
cout<<"the tree is :";
if(top == NULL) //判断排序树是否为空
{
cout<<"this tree is NULL"<<endl;
return 0;
}
else
{
head = -1; //将队列初始化
tail = 0;
queue[0] = top; //根节点存入队列
while(tail > head) //队列不为空就循环
{
temp = queue[++head]; //将对头成员取出输出
cout<<temp ->num<<' ';
if(temp ->left) //if左右节点存在就将其存入队列
queue[++tail] = temp ->left;
if(temp ->right)
queue[++tail] = temp ->right;
}
}
cout<<endl;
return 1;
}
int main(void)
{
int a[10] = {5,1,8,2,0,3,9,4,7,6};
data top = NULL;
top = build(a);
put(top);
searchone(top);
getchar();
getchar();
return 0;
}