[代码]

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
}