二叉排序树的建立与遍历
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct btree{
int data;
struct btree *left,*right;
} Btree;
void creat_node(Btree **p,int data);
void xxbl(Btree *p);
void zxbl(Btree *p);
void hxbl(Btree *p);
int main()
{
Btree *node=NULL;
int d[10]={4,3,7,5,14,2,5,6,8,1};
for(int i=0;i<10;i++){
creat_node(&node,d[i]);
}
xxbl(node);printf("\n");
zxbl(node);printf("\n");
hxbl(node);printf("\n");
return 0;
}
void creat_node(Btree **p,int data){
if(*p==NULL){
*p=(Btree *)malloc(sizeof(Btree));
(*p)->data=data;
(*p)->left=NULL;
(*p)->right=NULL;
}else{
Btree *next;
next=*p;
while(1){
if(data>=next->data){
if(next->right==NULL){
Btree *node=(Btree *)malloc(sizeof(Btree));
node->data=data;
node->left=NULL;
node->right=NULL;
next->right=node;
break;
}else{
next=next->right;
}
}else{
if(next->left==NULL){
Btree *node=(Btree *)malloc(sizeof(Btree));
node->data=data;
node->left=NULL;
node->right=NULL;
next->left=node;
break;
}else{
next=next->left;
}
}
}
}
}
void zxbl(Btree *p){//中序遍历
if(p!=NULL){
zxbl(p->left);
printf("%d ",p->data);
zxbl(p->right);
}
}
void xxbl(Btree *p){//先序遍历
if(p!=NULL){
printf("%d ",p->data);
xxbl(p->left);
xxbl(p->right);
}
}
void hxbl(Btree *p){//后序遍历
if(p!=NULL){
hxbl(p->left);
hxbl(p->right);
printf("%d ",p->data);
}
}