您的位置:首页 > 理论基础 > 数据结构算法

数据结构上机实验-二叉排序树的创建

2015-12-06 19:12 686 查看

二叉排序树

二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的节点。



二叉排序树经过中序遍历之后可得到递增序列。

本代码参考2005年华中科技大学计算机保研机试真题

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct node
{
int key;
struct node *l,*r;
}bstnode;
int bstinsert(bstnode *&p,int k)
{
if(p==NULL)
{
p=new bstnode();
p->key=k;
p->l=p->r=NULL;
return 1;
}
else if(k==p->key)//去重
return 0;
else if(k<p->key)
return bstinsert(p->l,k);
else
return bstinsert(p->r,k);
}
void build(bstnode *&bt,int *str,int n)
{
bt=NULL;
for(int i=0;i<=n-1;i++)
{
bstinsert(bt,str[i]);//每次插入都从树头开始
}
}
void preorder(bstnode *bt)
{
if(bt!=NULL)
{
printf("%d ",bt->key);
preorder(bt->l);
preorder(bt->r);
}
}
void inorder(bstnode *bt)
{
if(bt!=NULL)
{
inorder(bt->l);
printf("%d ",bt->key);
inorder(bt->r);
}
}
void posorder(bstnode *bt)
{
if(bt!=NULL)
{
posorder(bt->l);
posorder(bt->r);
printf("%d ",bt->key);
}
}
int main()
{
int n;
int num[10120];
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
bstnode *nd=new bstnode();
build(nd,num,n);
preorder(nd);
printf("\n");
inorder(nd);
printf("\n");
posorder(nd);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: