###### 先序后序中序非递归算法
// BinaryTreeBianli.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <queue>
#include <stack>
#include <iostream>
using namespace std;
typedef struct BiTNode{
char data;
BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

void CreateBiTree(BiTree &T)//建树，按先序顺序输入节点
{
char ch;
scanf_s("%c", &ch);
if (ch == ' ')
{
T = NULL;
return;
}
else
{
T = (BiTree)malloc(sizeof(BiTNode));
if (!T)
exit(1);
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void InOrderTraverse(BiTree T)//非递归中序遍历
{

stack<BiTree> Stack;
if (!T)
{
printf("空树！\n");
return;
}

while (T || !Stack.empty())
{
while (T)
{
Stack.push(T);
T = T->lchild;
}
T = Stack.top();
Stack.pop();
printf("%c", T->data);
T = T->rchild;
}
}

void PreOrderTraverse(BiTree T)//非递归先序遍历
{

stack<BiTree> Stack;
if (!T)
{
printf("空树！\n");
return;
}
while (T || !Stack.empty())
{
while (T)
{
Stack.push(T);
printf("%c", T->data);
T = T->lchild;
}
T = Stack.top();
Stack.pop();
T = T->rchild;
}
}

void PostOrderTraverse(BiTree T)//非递归后序遍历,用一个标记标记右子树是否访问过
{
int flag[20];
stack<BiTree> Stack;
if (!T)
{
printf("空树！\n");
return;
}
while (T)
{
Stack.push(T);
flag[Stack.size()] = 0;
T = T->lchild;
}
while (!Stack.empty())
{
T = Stack.top();
while (T->rchild && flag[Stack.size()] == 0)
{
flag[Stack.size()] = 1;
T = T->rchild;
while (T)
{
Stack.push(T);
flag[Stack.size()] = 0;
T = T->lchild;
}
}
T = Stack.top();
printf("%c", T->data);
Stack.pop();
}
}
void main()
{

BiTree T;
CreateBiTree(T);
PreOrderTraverse(T);
printf("\n");
InOrderTraverse(T);
printf("\n");
PostOrderTraverse(T);
printf("\n");
getchar();

}

void PostOrder(bitreptr t)

{

if(t==NULL)

return ;

else

{

p=t;

top=0;

}

do

{

while(p!=NULL)

{

top++;

s[top]=p;

p=p->Lchild;

}

while((top!=0)&&(p==NULL))

{

p=s[top];

top--;

if(p>0)

{

top++;

s[top]=-p;

p=p->Rchild;

}

else

{

p=-p;

printf("%d",p->data);

p=NULL;

}

}

}while((top!=0)||p!=NULL);

}

#### 树的先序，中序，后序遍历(非递归算法)

2014-04-21 16:43:08

#### 前中后序非递归遍历算法

2014-01-27 20:43:25

#### 二叉树先序，中序，后序遍历非递归实现

2012-04-28 14:30:02

#### 二叉树的非递归前序，中序，后续遍历实现

2017-05-16 20:56:49

#### 二叉树前序、中序、后序非递归遍历实现（C语言）

2017-05-27 17:58:33

#### 非递归前序遍历（非递归、非栈）

2014-03-17 14:50:27

#### 二叉树（1）----先序遍历（前序遍历），递归和非递归方式实现

2014-12-14 19:00:02

#### 先序遍历的非递归算法

2014年10月31日 42KB 下载

#### 二叉树前序遍历的递归与非递归算法

2017-03-08 21:08:32

#### 后序遍历非递归算法 先序中序非递归

2015-07-24 16:32:46