二叉树的中序遍历(非递归)

本文介绍了一个使用栈辅助实现二叉树中序遍历的C语言程序。该程序首先通过递归方式构建二叉树,然后利用栈进行中序遍历并打印节点值。文章提供了完整的代码实现。


[代码] [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 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值