#include<stdio.h>
#include<stdlib.h>
typedef struct Bitree //二叉树节点,结构定义
{
int data;
struct Bitree *Lchild,*Rchild;
Bitree(int _data)
{
data=_data;
Lchild=NULL;
Rchild=NULL;
}
void SetChild(struct Bitree *Lchild,struct Bitree *Rchild)
{
this->Lchild=Lchild;
this->Rchild=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 pStack;//栈指针
//printf("请输入根结点的值:e= ");
BitreeHead=CreatBitree();
pStack=InitStack();
InorderTraverse(BitreeHead,pStack);
return 0;
}
LinkBitree CreatBitree()
{
/*
int edata;
LinkBitree Head;
//scanf("%d",&edata);
edata=1;
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;
*/
LinkBitree A=new BitreeNode(1);
LinkBitree B1=new BitreeNode(21);LinkBitree B2=new BitreeNode(22);
LinkBitree C1=new BitreeNode(31);LinkBitree C2=new BitreeNode(32);LinkBitree C3=new BitreeNode(33);LinkBitree C4=new BitreeNode(34);
LinkBitree D1=new BitreeNode(41);LinkBitree D2=new BitreeNode(42);LinkBitree D3=new BitreeNode(43);LinkBitree D4=new BitreeNode(44);
LinkBitree D5=new BitreeNode(45);LinkBitree D6=new BitreeNode(46);LinkBitree D7=new BitreeNode(47);LinkBitree D8=new BitreeNode(48);
A->Lchild=B1;A->Rchild=B2;
B1->Lchild=C1;B1->Rchild=C2;B2->Lchild=C3;B2->Rchild=C4;
C1->SetChild(D1,D2);C2->SetChild(D3,D4);C3->SetChild(D5,D6);C4->SetChild(D7,D8);
return A;
}
StackList InitStack()
{
StackList pStack;
pStack=(StackList)malloc(sizeof(Stack));
if(pStack==NULL)
{
printf("内存分配失败!!");
exit(0);
}
else
{
pStack->top=0;
pStack->bottom=0;
}
return pStack;
}
void InorderTraverse(LinkBitree Head,StackList pStack)
{
do
{
while(Head)
{
pStack->data[pStack->top]=Head;pStack->top=pStack->top+1;//入栈
Head=Head->Lchild;
}
if(pStack->top)
{
pStack->top--;Head=pStack->data[pStack->top];//出栈
printf("%d ",Head->data);
Head=Head->Rchild;
}
}while(pStack->top||Head);
printf("\n");
}