二叉树的先序遍历(非递归)
2012-05-25 07:53:23 来源:WEB开发网核心提示:#include<stdio.h>#include<stdlib.h>typedef struct Bitree{int data;struct Bitree *Lchild,*Rchild;}BitreeNode,*LinkBitree;typedef struct Stack{LinkBit
#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)
{
printf("%d ",Head->data);
Stack->data[Stack->top]=Head;
Stack->top=Stack->top+1;
Head=Head->Lchild;
}
if(Stack->top)
{
Stack->top--;
Head=Stack->data[Stack->top];
Head=Head->Rchild;
}
}while(Stack->top||Head);
}
更多精彩
赞助商链接
