![在这里插入图片描述](https://img-blog.csdnimg.cn/20200511212415377.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200511212445438.png)
欢迎关注我,学习资料免费分享给你哦!还有其他超多学习资源,都是我自己学习过的,经过过滤之后的资源,免去你还在因为拥有大量资源不知如何入手的纠结,让你体系化学习。
![在这里插入图片描述](https://img-blog.csdnimg.cn/202005112127499.jpg)
二叉树结构的定义
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
二叉树的遍历(非递归方式)
#define STACK_SIZE 50
#define True 1
#define False 0
typedef struct Snode
{
BinTree data[STACK_SIZE];
int size;
};
typedef struct Snode *stack;
stack creatStack()
{
stack s;
s=(stack)malloc(sizeof(struct Snode));
if(s==NULL)
{
return NULL;
}
s->size=-1;
return s;
}
int isStackFull(stack s)
{
return s->size==(STACK_SIZE-1);
}
int isStackEmpty(stack s)
{
return s->size==-1;
}
void push(stack s,BinTree BT)
{
if(isStackFull(s)==True)
{
return;
}
s->size++;
s->data[s->size]=BT;
}
BinTree pop(stack s)
{
if(isStackEmpty(s)==True)
{
return NULL;
}
return s->data[s->size--];
}
BinTree top(stack s)
{
return s->data[s->size];
}
void destroyStack(stack s)
{
free(s);
}
void InorderTraversal( BinTree BT )
{
stack s;
s=creatStack();
if(s==NULL)
{
return;
}
while(!isStackEmpty(s)||(BT!=NULL))
{
while(BT!=NULL)
{
push(s,BT);
BT=BT->Left;
}
BT=pop(s);
printf(" %c",BT->Data);
BT=BT->Right;
}
destroyStack(s);
}
//前序遍历
void PreorderTraversal( BinTree BT )
{
stack s;
s=creatStack();
if(s==NULL)
{
return;
}
while(!isStackEmpty(s)||(BT!=NULL))
{
while(BT!=NULL)
{
push(s,BT);
printf(" %c",BT->Data);
BT=BT->Left;
}
BT=pop(s);
BT=BT->Right;
}
destroyStack(s);
}
//后序遍历
void PostorderTraversal( BinTree BT )
{
stack s;
s=creatStack();
if(s==NULL)
{
return;
}
if(BT==NULL)
{
return;
}
push(s,BT);
push(s,BT);
while(!isStackEmpty(s))
{
BT=pop(s);
if(!isStackEmpty(s)&&BT==top(s))
{
if(