- #include<stdio.h>
- #include<stdlib.h>
- typedef struct Bitree
- {
- int data;
- struct Bitree *Lchild,*Rchild;
- }BitreeNode,*LinkBitree;
- typedef struct Stack
- {
- LinkBitree data[20];
- int top,bottom;
- }Stack,*StackList;
- LinkBitree CreatBitree();
- StackList InitStack();
- void InorderTraverse(LinkBitree,StackList);
- int main()
- {
- LinkBitree BitreeHead;
- StackList Stack;
- printf("请输入根结点的值:e= ");
- BitreeHead=CreatBitree();
- Stack=InitStack();
- InorderTraverse(BitreeHead,Stack);
- return 0;
- }
- LinkBitree CreatBitree()
- {
- int edata;
- LinkBitree Head;
- scanf("%d",&edata);
- if(edata==0)
- {
- Head=NULL;
- }
- else
- {
- Head=(LinkBitree)malloc(sizeof(BitreeNode));
- if(Head==NULL)
- {
- printf("内存分配失败!!");
- exit(0);
- }
- else
- {
- Head->data=edata;
- printf("请输入结点%d的左孩子的值:e= ",Head->data);
- Head->Lchild=CreatBitree();
- printf("请输入结点%d的右孩子的值:e= ",Head->data);
- Head->Rchild=CreatBitree();
- }
- }
- return Head;
- }
- StackList InitStack()
- {
- StackList Stack;
- Stack=(StackList)malloc(sizeof(Stack));
- if(Stack==NULL)
- {
- printf("内存分配失败!!");
- exit(0);
- }
- else
- {
- Stack->top=0;
- Stack->bottom=0;
- }
- return Stack;
- }
- void InorderTraverse(LinkBitree Head,StackList Stack)
- {
- do
- {
- while(Head)
- {
- Stack->data[Stack->top]=Head;
- Stack->top=Stack->top+1;
- Head=Head->Lchild;
- }
- if(Stack->top)
- {
- Stack->top--;
- Head=Stack->data[Stack->top];
- printf("%d ",Head->data);
- Head=Head->Rchild;
- }
- }while(Stack->top||Head);
- }
- //该片段来自于http://www.codesnippet.cn/detail/190620134155.html
来源: http://www.codesnippet.cn/detail/190620134155.html