您的位置:首页 > 其它

二叉排序数

2016-03-07 18:53 218 查看
#include<iostream>
#include<cstdio>
using namespace std;

typedef struct BiNode{
int data;
struct BiNode *left;
struct BiNode *right;
}BiTree,*Bilink;

//前序遍历
void  PreOrder(Bilink bn){
if(bn)
{
cout<<bn->data<<" ";
PreOrder(bn->left);
PreOrder(bn->right);
//cout<<endl;
}
}
//中序遍历
void  MidOrder(Bilink bn){
if(bn)
{
MidOrder(bn->left);
cout<<bn->data<<" ";
MidOrder(bn->right);
//cout<<endl;
}
}
//后序遍历
void  PostOrder(Bilink bn){
if(bn)
{
PostOrder(bn->left);
PostOrder(bn->right);
cout<<bn->data<<" ";
//cout<<endl;
}
}
//二叉树撤销
void deleteBT(Bilink bn){
if(bn)
{
deleteBT(bn->left);
deleteBT(bn->right);
free(bn);
}
}
//建立二叉树
void buildBianryTree(Bilink &bn,int elem[],int length){
Bilink pre,p;//pre为前节点,p为当前节点
int leftOrright;//0表示左孩子,1表示右孩子
int success;
bn = new BiTree;//生成头结点
bn->data = elem[0];//初始化
bn->right = NULL;
bn->left = NULL;

for(int i = 1;i<length;i++)//遍历插入
{
success = 0;
pre = NULL;//保存当前节点
p = bn;
while(p){
pre = p;
if(p->data==elem[i])
{
success = 1;
break;//说明该值的节点不用再插入
}else if(p->data<elem[i]){
//此时新节点应插入到右节点上
leftOrright = 1;
p = p->right;
}else
{
leftOrright = 0;
p = p->left;
}
}
if(!success)
{
p = new BiTree;//创建新节点
p->data = elem[i];
p->left = NULL;
p->right = NULL;
if(leftOrright==0)//新插入的节点作为左孩子
pre->left = p;
else if(leftOrright==1)//新插入的节点作为右孩子
pre->right = p;
}
}
}
int main(){
Bilink head;
int elem[110];
int n;
while(scanf("%d",&n)!=EOF){
for(int i = 0;i<n;i++)
scanf("%d",&elem[i]);
buildBianryTree(head,elem,n);
PreOrder(head);
cout<<endl;
MidOrder(head);
cout<<endl;
PostOrder(head);
cout<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: