二叉排序树 / 二叉搜索树 / 二叉查找树
特点
- 中序遍历的结果必为递增序列
- 字典序(层序)最小的遍历方法为前序遍历
结构体定义
struct node
{
int data;
node *lc;
node *rc;
};
建树
//建二叉排序树
void create(node *&root,int t)
{
if(root==NULL)
{
root=new node;
root->data=t;
root->lc=NULL;
root->rc=NULL;
}
else if(t< root->data) create(root->lc,t);
else create(root->rc,t);
}
前序遍历(层序、字典序)
int flag;
int pre[10010];
//前序遍历
void preorder(node *root)
{
if(root)
{
//if(flag!=0) cout<<" ";
cout<<root->data;//数字1 2 3 4 5建树
///pre[a++]=root->data;///数字序列12345建树
//flag=1;
preorder(root->lc);
preorder(root->rc);
}
}
int main()
{
int n,num;//n个数,用num表示数字
node *root=NULL;
for(int i=0;i<n;i++)
{
cin>>num;
create(root,num);
}
/*char n[17];//数字序列
node *root=NULL;
cin>>n;
for(int i=0;i<strlen(n);i++)
{
create(root,n[i]-'0');
}*/
//flag=0;//当输入为数字时控制空格输出
///a=0;
preorder(root);
cout<<endl;
}
中序遍历
int flag;
int in[10010];
//中序遍历
void inorder(node *root)
{
if(root)
{
inorder(root->lc);
//if(flag!=0) cout<<" ";//当输入为数字时控制空格输出
cout<<root->data;//数字1 2 3 4 5建树
///in[b++]=root->data;///数字序列12345建树
//flag=1;//当输入为数字时控制空格输出
inorder(root->rc);
}
}
int main()
{
int n,num;//n个数,用num表示数字
node *root=NULL;
for(int i=0;i<n;i++)
{
cin>>num;
create(root,num);
}
/*char n[17];//数字序列
node *root=NULL;
cin>>n;
for(int i=0;i<strlen(n);i++)
{
create(root,n[i]-'0');
}*/
//flag=0;//当输入为数字时控制空格输出
///b=0;
inorder(root);
cout<<endl;
}
后序遍历
int flag;
int post[10010];
//后序遍历
void postorder(node *root)
{
if(root)
{
postorder(root->lc);
postorder(root->rc);
//if(flag!=0) cout<<" ";//当输入为数字时控制空格输出
cout<<root->data;//数字1 2 3 4 5建树
///in[b++]=root->data;///数字序列12345建树
//flag=1;//当输入为数字时控制空格输出
}
}
int main()
{
int n,num;//n个数,用num表示数字
node *root=NULL;
for(int i=0;i<n;i++)
{
cin>>num;
create(root,num);
}
/*char n[17];//数字序列
node *root=NULL;
cin>>n;
for(int i=0;i<strlen(n);i++)
{
create(root,n[i]-'0');
}*/
//flag=0;//当输入为数字时控制空格输出
///c=0;
postorder(root);
cout<<endl;
}