二叉排序树的构造与遍历
//二叉排序树的构造与遍历
/*
7
63 90 70 55 67 42 98
*/
#include <iostream>
using namespace std;
struct BiNode
{
int data;
BiNode *lchild,*rchild;
};
int pre[100];
int num;
//二叉排序树的插入
BiNode *Insert(BiNode *bt,int x)
{
if(bt==NULL)//找到插入的位置
{
BiNode *a=new BiNode;
a->data=x;
a->rchild=a->lchild=NULL;
bt=a;
return bt;
}
else if(bt->data<x)bt->rchild=Insert(bt->rchild,x);//插入到当前节点的右孩子
else bt->lchild=Insert(bt->lchild,x); //插入到当前节点的左孩子
}
//通过重复调用插入操作形成二叉排序树
BiNode *Create()
{
BiNode *bt=NULL;
for(int i=0;i<num;i++)
{
bt=Insert(bt,pre[i]);
}
return bt;
}
//中序遍历二叉排序树
void Mid(BiNode *bt)
{
if(bt==NULL)return;
else{
Mid(bt->lchild);
cout<<bt->data<<" ";
Mid(bt->rchild);
}
}
int main()
{
cin>>num;
for(int i=0;i<num;i++)
{
cin>>pre[i];
}
Mid(Create());
return 0;
}
【输入数据】
7
63 90 70 55 67 42 98
【输出数据】
二叉排序树的中序遍历是一个单调递增的数组