二叉树的中序遍历(非递归)
转载
[代码]
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
}