二叉树的先中后序遍历的非递归算法都和栈有关,栈的相关操作请点此查看。
①先序遍历
思路一:先将根结点进栈,当栈不为空时,出栈并访问,然后依次将右左结点进栈(栈先进后出,所以先进栈右结点)。
顺序栈类型:
typedef struct
{
Btnode *data[MaxSize];
int top;
}Sqstack;
思路一的实现:
void PreOrder(Btnode *b)
{
Btnode *p;
SqStack st;
InitStack(st);
if (b != NULL)
{
Push(st, b);
while (!StackEmpty(st))
{
Pop(st, p);
cout << p->data;
if (p->right != NULL)
Push(st, p->right);
if (p->left !=