/*先序遍历二叉树的非递归算法(直接实现栈操作)*/voidPreOrder(BiTree bt){
//s[m]表示栈,top表示栈顶指针
BiTNode* s[Stack_Size];int top =0;
BiTNode* p = bt;do{
while(p !=NULL){
if(top > Stack_Size)return;printf("%c ", p->data);
top = top +1;
s[top]= p;
p = p->LChild;}if(top !=0){
p = s[top];
top = top -1;
p = p->RChild;}}while(p !=NULL|| top !=0);}
1.2 中序遍历
/*中序遍历二叉树的非递归算法(直接实现栈操作)*/voidInOrder(BiTree bt){
//s[m]表示栈,top表示栈顶指针
BiTNode* s[Stack_Size];int top =0;
BiTNode* p = bt;do{
while(p !=NULL){
if(top > Stack_Size)return;
top = top +1;
s[top]= p;
p = p->LChild;}if(top !=0){
p = s[top];
top = top -1;printf("%c ", p->data);
p = p->RChild;}}while(p !=NULL|| top !=0);}
1.3 后序遍历
/*后序遍历二叉树的非递归算法(直接实现栈操作)*/voidPostOrder(BiTree bt){
//s[m]表示栈,top表示栈顶指针
BiTNode* s[Stack_Size];int top =0;
BiTNode* p = bt,* q =NULL;while(p !=NULL|| top !=0){
if(p !=NULL){
if(top > Stack_Size)return;
top = top +1;
s[top]= p;
p = p->LChild;}else{
p = s[top];if(p->RChild ==NULL|| p->RChild == q){
//无右孩子结点或右孩子结点已遍历过printf("%c ", p->data);
q = p;
top = top -1;
p =NULL;}else
p = p->RChild;}}}