[代码] [C/C++]代码
01 | #include<stdio.h> |
02 | #include<stdlib.h> |
03 |
04 | typedef struct Bitree |
05 | { |
06 | int data; |
07 | struct Bitree *Lchild,*Rchild; |
08 | }BitreeNode,*LinkBitree; |
09 |
10 | typedef struct Stack |
11 | { |
12 | LinkBitree data[20]; |
13 | int top,bottom; |
14 | }Stack,*StackList; |
15 |
16 | LinkBitree CreatBitree(); |
17 |
18 | StackList InitStack(); |
19 |
20 | void InorderTraverse(LinkBitree,StackList); |
21 |
22 | int main() |
23 | { |
24 | LinkBitree BitreeHead; |
25 | StackList Stack; |
26 | printf ( "请输入根结点的值:e= " ); |
27 | BitreeHead=CreatBitree(); |
28 | Stack=InitStack(); |
29 | InorderTraverse(BitreeHead,Stack); |
30 | return 0; |
31 | } |
32 |
33 | LinkBitree CreatBitree() |
34 | { |
35 | int edata; |
36 | LinkBitree Head; |
37 | scanf ( "%d" ,&edata); |
38 | if (edata==0) |
39 | { |
40 | Head=NULL; |
41 | } |
42 | else |
43 | { |
44 | Head=(LinkBitree) malloc ( sizeof (BitreeNode)); |
45 | if (Head==NULL) |
46 | { |
47 | printf ( "内存分配失败!!" ); |
48 | exit (0); |
49 | } |
50 | else |
51 | { |
52 | Head->data=edata; |
53 | printf ( "请输入结点%d的左孩子的值:e= " ,Head->data); |
54 | Head->Lchild=CreatBitree(); |
55 | printf ( "请输入结点%d的右孩子的值:e= " ,Head->data); |
56 | Head->Rchild=CreatBitree(); |
57 | } |
58 | } |
59 | return Head; |
60 | } |
61 |
62 |
63 | StackList InitStack() |
64 | { |
65 | StackList Stack; |
66 | Stack=(StackList) malloc ( sizeof (Stack)); |
67 | if (Stack==NULL) |
68 | { |
69 | printf ( "内存分配失败!!" ); |
70 | exit (0); |
71 | } |
72 | else |
73 | { |
74 | Stack->top=0; |
75 | Stack->bottom=0; |
76 | } |
77 | return Stack; |
78 | } |
79 |
80 |
81 | void InorderTraverse(LinkBitree Head,StackList Stack) |
82 | { |
83 | do |
84 | { |
85 | while (Head) |
86 | { |
87 | Stack->data[Stack->top]=Head; |
88 | Stack->top=Stack->top+1; |
89 | Head=Head->Lchild; |
90 | } |
91 | if (Stack->top) |
92 | { |
93 | Stack->top--; |
94 | Head=Stack->data[Stack->top]; |
95 | printf ( "%d " ,Head->data); |
96 | Head=Head->Rchild; |
97 | } |
98 | } while (Stack->top||Head); |
99 | } |