主要是二叉树先序遍历的非递归算法,不知道怎么回事,创建二叉树的方法没错,所以没贴出来。
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define true 1
#define ERROR 0
#define OVERFLOW 0
#define StackSize 50 //预分配栈空间最多为50
typedef char TElemType;
typedef int Status;
//二叉树的二叉链表存储
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BitTree;
typedef BitTree SElemType; //栈元素类型
//栈的结构
typedef struct{
SElemType data[StackSize];
int top;
}SeqStack;
//初始化栈
void InitStack(SeqStack *S)
{
S->top=-1;
}
//判断栈为空
int StackEmpty(SeqStack *S)
{
if(S->top==-1)
{
return 1;
}
else
{
return 0;
}
}
//判断栈满
int StackFull(SeqStack *S)
{
if(S->top==StackSize-1)
{
return 1;
}
else
{
return 0;
}
}
//进栈
void Push(SeqStack *S,SElemType e)
{
if(StackFull(S))
{
printf("栈已满!\n");
exit(OVERFLOW);
}
else
{
S->data[++S->top]=e; //栈顶指针先加1再进栈
}
}
//出栈
SElemType Pop(SeqStack *S)
{
if(StackEmpty(S))
{
printf("栈中已没有元素!\n");
exit(OVERFLOW);
}
else
{
return S->data[S->top--]; //先出栈再栈顶指针减1
}
}
//取栈顶元素
SElemType StackTop(SeqStack *S)
{
if(StackEmpty(S))
{
printf("栈中已空!\n");
exit(OVERFLOW);
}
else
{
return S->data[S->top];
}
}
//先序遍历二叉树的非递归算法
void PreOrder(BitTree T)
{
SeqStack *S=NULL;
BitTree p;
InitStack(S);
Push(S,T); //根指针进栈
while(!StackEmpty(S))
{
while(p=StackTop(S)) //左结点
{
printf("%c ",p->data);
Push(S,p->lchild);
}
p=Pop(S); //空指针退栈
if(!StackEmpty(S)) //右结点
{
p=Pop(S);
//printf("%c ",p->data);
Push(S,p->rchild);
}
}
}
void main()
{
BitTree T=NULL;
printf("请输入二叉树的结点:\n");
CreateBiTree(&T);
printf("非递归先序遍历二叉树:\n");
PreOrder(T);
}
不大明白怎么看,你能帮我调试一下吗?怎么改?