#include<iostream>
using namespace std;
#define maxsize 100
typedef int elemtype;
typedef struct binode//二叉树结构
{
elemtype data;
struct binode* lch, * rch;
}binode,*bitree;
typedef struct
{
bitree* base;
bitree* top;
int stacksize;
}sqstack;//栈的结构
void preordertraverse(bitree t)//二叉树先序遍历算法
{
if (t != NULL)
{
cout << t->data << endl;
preordertraverse(t->lch);
preordertraverse(t->rch);
}
}
void inordertraverse(bitree t)//二叉树中序遍历算法
{
if (t != NULL)
{
preordertraverse(t->lch);
cout << t->data << endl;
preordertraverse(t->rch);
}
}
void postordertraverse(bitree t)//二叉树后序遍历算法
{
if (t != NULL)
{
preordertraverse(t->lch);
preordertraverse(t->rch);
cout << t->data << endl;
}
}
bool initstack(sqstack& s)//顺序栈初始化
{
s.base = new bitree[maxsize];
if (!s.base)
{
exit(-1);
}
s.top = s.base;
s.stacksize = maxsize;
return 1;
}
bool emptystack(sqstack s)//判断顺序栈是否为空
{
if (s.base == s.top)
{
return 1;
}
else
{
return 0;
}
}
bool push(sqstack& s, bitree e)//顺序栈入栈
{
if (s.top - s.base == s.stacksize)
{
return 0;
}
*s.top = e;
s.top++;
return 1;
}
bool pop(sqstack& s, bitree& e)//顺序表出栈
{
if (s.top == s.base)
{
return 0;
}
--s.top;
e = *s.top;
return 1;
}
bool inorder(bitree t)//中序遍历的非递归算法
{
sqstack S;
bitree p,q;
initstack(S);
p = t;
while (p || !emptystack(S))
{
if (p)
{
push(S, p);
p = p->lch;
}
else
{
pop(S, q);
cout << q->data << endl;
p = q->rch;
}
}
return 1;
}
int main()
{
return 0;
}