OJ-二叉搜索树的建立及遍历
- 题目描述:
-
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。
- 输入:
-
输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
- 输出:
-
可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<malloc.h> 4 #define M 100 5 6 typedef struct Btnode 7 { 8 struct Btnode *lchild; 9 struct Btnode *rchild; 10 int data; 11 }btnode,*pnode; 12 13 14 pnode insertBt(pnode p,int data) 15 { 16 if(p==NULL) 17 { 18 p=(pnode)malloc(sizeof(btnode)); 19 if(p==NULL) 20 { 21 printf("out of space!\n"); 22 exit(0); 23 } 24 p->data=data; 25 p->lchild=NULL; 26 p->rchild=NULL; 27 }else if(data>p->data) 28 p->rchild=insertBt(p->rchild,data); 29 else if(data<p->data) 30 p->lchild=insertBt(p->lchild,data); 31 32 return p; 33 34 } 35 36 37 38 void preorder(pnode p) 39 { 40 if(p) 41 { 42 printf("%d ",p->data); 43 preorder(p->lchild); 44 preorder(p->rchild); 45 } 46 } 47 void inorder(pnode p) 48 { 49 if(p) 50 { 51 inorder(p->lchild); 52 printf("%d ",p->data); 53 inorder(p->rchild); 54 } 55 } 56 void postorder(pnode p) 57 { 58 if(p) 59 { 60 postorder(p->lchild); 61 postorder(p->rchild); 62 printf("%d ",p->data); 63 } 64 } 65 void freeAll(pnode p) 66 { 67 if(p->lchild==NULL&&p->rchild==NULL) 68 { 69 free(p); 70 return ; 71 } 72 if(p->lchild) 73 freeAll(p->lchild); 74 if(p->rchild) 75 freeAll(p->rchild); 76 } 77 int main() 78 { 79 int n=0,a[M]; 80 int i=0; 81 pnode p=NULL; 82 while((scanf("%d",&n))!=EOF) 83 { 84 for(i=0;i<n;i++) 85 { 86 scanf("%d",&a[i]); 87 p=insertBt(p,a[i]); 88 } 89 preorder(p); 90 printf("\n"); 91 inorder(p); 92 printf("\n"); 93 postorder(p); 94 printf("\n"); 95 freeAll(p); 96 p=NULL; 97 } 98 return 0; 99 } 100 101 /************************************************************** 102 Problem: 1201 103 User: 104 Language: C++ 105 Result: Accepted 106 Time:50 ms 107 Memory:1944 kb 108 ****************************************************************/
为遇见一个更好的自己而奋斗!