用二叉链表建立二叉树

 1 #include<stdio.h> 
 2 #include<stdlib.h>
 3 typedef struct node
 4 {
 5     int data;
 6     struct node *l,*r;
 7     
 8 }tree;
 9 tree* Creattree(void)//层次建立二叉树 
10 {
11     int data,front=1,rear=0; 
12     tree* t, *root, *q[1001];
13   while(scanf("%d", &data),data!=-1) 
14   { 
15   if(data==0) 
16   t = NULL; 
17   else 
18   { 
19   t=(tree*)malloc(sizeof(tree));
20   t->data=data;
21   t->l=NULL; 
22   t->r=NULL; 
23   } 
24   rear++;
25   q[rear]=t;//元素入队 
26   if(rear==1)
27   root= t;//建立根结点 
28   else
29  {
30   if(q[front]!=NULL) 
31   { 
32   if(rear%2==0)
33   q[front]->l = t;//偶数给左 
34   else 
35   q[front]->r = t;//奇数给右 
36   } 
37   if(rear%2==1)//保证两个数都挂上树了再换下一个结点 
38   front++;
39 }
40 } 
41 return root;
42 }
43 void preorder(tree *p)//这里只举例前序遍历,中序和后序前一张有 
44 {
45     if(p==NULL)
46    return;
47    printf(" %d", p->data);
48    preorder(p->l);
49    preorder(p->r);
50 }
51 int main()
52 {
53     tree *t;
54     int n;
55     scanf("%d",&n);
56     while(n--)
57     {
58         t=Creattree();
59         preorder(t);
60         printf("\n");
61     }
62     return 0;
63 }

 

posted @ 2019-05-10 16:44  AQhhhhh  阅读(3247)  评论(0编辑  收藏  举报