1 void porder(BTree *b)
2 {
3 BTree *St[MaxSize],*p;
4 int top=1;
5 if(b!=NULL)
6 {
7 top++;
8 St[top]=b;
9 while(top>-1)
10 {
11 p=St[top];
12 top--;
13 printf("%c",p->data);
14 if(p->rchild!=NULL)
15 {
16 top++;
17 St[top]=p->rchild;
18 }
19 if(p->lchild!=NULL)
20 {
21 top++;
22 St[top]=p->lchild;
23 }
24 }
25 }
26 }
27
28 void psorder(BTree*t)
29 {
30 BTree *St[MaxSize];
31 BTree*p;
32 int flag,top=-1;
33 do
34 {
35 while(t)
36 {
37 top++;
38 St[top]=t;
39 t=t->lchild;
40 }
41 p=NULL;
42 flag=1;
43 while(top!=-1&&flag)
44 {
45 t=St[top];
46 if(t->rchild==p)
47 {
48 printf("%c ",t->data);
49 top--;
50 p=t;
51 }
52 else
53 {
54 t=t->rchild;
55 flag=0;
56 }
57 }
58 }while(top!=-1)
59 }
60
61 int level(BTree *b,ElemType x,int h)
62 {
63 int h1;
64 if(b==NULL)
65 return(0);
66 else
67 if(b->data==x)
68 return(h);
69 else
70 {
71 h1=level(b->lchild,x,h+1);
72 if(h1!=0)
73 return(h1);
74 else
75 return level(b->rchild,x,h+1);
76 }
77 }
78
79 void translevel(BTree *b)
80 {
81 struct node
82 {
83 BTree *vec[MaxSize];
84 int f,r;
85 }Qu;
86 Qu.f=0;
87 Qu.r=0;
88 if(b!=NULL)
89 printf("%c ",b->data);
90 Qu.vec[Qu.r]=b;
91 Qu.r=Qu.r+1;
92 while(Qu.f<Qu.r)
93 {
94 b=Qu.vec[Qu.f];
95 Qu.f=Qu.f+1;
96 if(b->lchild!=NULL)
97 {
98 printf("%c",b->lchild->data);
99 Qu.vec[Qu.r]=b->lchild;
100 Qu.r=Qu.r+1;
101 }
102 if(b->rchild!=NULL)
103 {
104 printf("%c ",b->rchild->data);
105 Qu.vec[Qu.r]=b->rchild;
106 Qu.r=Qu.r+1;
107 }
108 }
109 printf("\n");
110 }