首先是关于堆栈的实现
1、实现后序遍历+先序遍历。
#include <stdio.h>
#include <stdlib.h>
void InOrderTraversal(BinTree BT){
BinTree T BT;
Stack S = CreatStrack(MaxSize);
While(T || !IsEmpty(S))
{
while(T){
push(S,T);//1次访问+2次访问的添加
if(T->left)T=T->left,printf("%d",T->data);//1次访问,估先序遍历在此处加 printf
else T=T->right;
}
//2次访问+3次访问
if(IsEmpty(s)){
pop(S,T);//3次访问后 扔掉结点
//printf("%d",T->data);//后序遍历的打印
pop(S,T);//(非叶子结点的二次访问)
}
}
}
2、实现中序遍历+先序遍历。
#include <stdio.h>
#include <stdlib.h>
void InOrderTraversal(BinTree BT){
BinTree T BT;
Stack S = CreatStrack(MaxSize);
While(T || ! IsEmpty(S))
{
while(T){
push(S,T);//1次访问
T =T->left;
}
if(!IsEmpty(S)){
pop(S,T);//2次访问+抛弃结点
printf("%d",T->data);//中序遍历打印
T = T->right;
}
}
}
3、队列实现树
该方法实现了层序遍历,通过先进先出原则.
偷懒偷懒,引图两张
下图为将队列改成 堆栈后,所有图片均为 mooc上