题解 | #二叉排序树#
二叉排序树
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; }