题解 | #二叉排序树#
二叉排序树
https://www.nowcoder.com/practice/b42cfd38923c4b72bde19b795e78bcb3
#include <stdio.h>
#include<stdlib.h>
typedef struct tree{
int value;
struct tree*lnode;
struct tree*rnode;
}tree,*root ;
void insert(root t,int e){
tree* temp=(root)malloc(sizeof(tree));
temp->value=e;
temp->lnode=NULL;
temp->rnode=NULL;
tree *a1=t,*a2=t;int tag=0;
while(1){
if(a1==NULL){
if(tag==0){
a2->lnode=temp;
}else{
a2->rnode=temp;
}break;
}else if(a1->value<e){
a2=a1;a1=a1->rnode;tag=1;
}else if(a1->value>e){
a2=a1;a1=a1->lnode;tag=0;
}else if(a1->value==e){
free(temp);
break;
}
}
}
void preorder(root t){
if(t==NULL)return;
printf("%d ",t->value);
preorder(t->lnode);
preorder(t->rnode);
}
void midorder(root t){
if(t==NULL)return;
midorder(t->lnode);
printf("%d ",t->value);
midorder(t->rnode);
}
void postorder(root t){
if(t==NULL)return;
postorder(t->lnode);
postorder(t->rnode);
printf("%d ",t->value);
}
int main() {
int n;
while(scanf("%d", &n)!=EOF){
int e;
scanf("%d",&e);
tree* T=(root)malloc(sizeof(tree));
T->value=e;
T->lnode=NULL;
T->rnode=NULL;
for(int i=1;i<n;i++){
int temp;
scanf("%d",&temp);
insert(T,temp);
}
preorder(T);
printf("\n");
midorder(T);
printf("\n");
postorder(T);
printf("\n");
}
return 0;
}
