您的位置:首页 > 其它

二叉排序树的实现

2016-07-07 20:07 471 查看
二叉排序树是一颗特殊的二叉树:对于树上的任意一个结点,根节点的值一定大于其左子树上的任意结点的值,一定小于其右子树上任意结点的数值。

所以我们可以插入实现二叉排序树,思路可以这样:

    1、若当前树为空,则x为根节点

    2、如果树不为空,比较根节点与之大小,若插入值小于根节点,就继续比较跟节点的左子树,即最终插入左子树中,否者插入右子树中。

我们以4、2、6、1、3为例,二叉树建树过程如下:



现在实现,输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。

#include<stdio.h>
#include<string.h>

struct Node{
Node *lchild;
Node *rchild;
int data;
}Tree[100];
int loc;
Node *creat(){
Tree[loc].lchild=Tree[loc].rchild=NULL;
return &Tree[loc ++];
}

Node *build(Node *T,int x){
if(T==NULL){
T=creat();
T->data=x;
return T;
}
else if(x<T->data){
T->lchild=build(T->lchild,x);
}
else if(x>=T->data){
T->rchild=build(T->rchild,x);
}
return T;
}

void preOrder(Node *T){
printf("%d",T->data);
if(T->lchild!=NULL){
preOrder(T->lchild);
}
if(T->rchild!=NULL){
preOrder(T->rchild);
}
}
void inOrder(Node *T){
if(T){
if(T->lchild!=NULL){
inOrder(T->lchild);
}
printf("%d",T->data);
if(T->rchild!=NULL){
inOrder(T->rchild);
}
}
}
void postOrder(Node *T){
if(T){
if(T->lchild!=NULL){
postOrder(T->lchild);
}
if(T->rchild!=NULL){
postOrder(T->rchild);
}
printf("%d",T->data);
}
}

int main(){
int n;
loc=0;
scanf("%d",&n);
Node *T = NULL;
for(int i=0; i<n; i++){
int x;
scanf("%d",&x);

T=build(T,x);
}
//Traval
preOrder(T);
printf("\n");
inOrder(T);
printf("\n");
postOrder(T);
printf("\n");
return 0;
}


结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: