二叉树先序、中序、后序三种遍历的非递归算法
10122009 / No Comment / 备考资料
先序遍历非递归算法
#define maxsize 100
typedef struct {
Bitree Elem[maxsize];
int top;
}SqStack;
void PreOrderUnrec(Bitree t) {
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s)) {
while (p!=null) { // 遍历左子树
visite(p->data);
push(s,p);
p=p->lchild;
} // endwhile
if (!StackEmpty(s)) { // 通过下一次循环中的内嵌while实现右子树遍历
p=pop(s);
p=p->rchild;
} // endif
} // endwhile
} // PreOrderUnrec
中序遍历非递归算法
#define maxsize 100
typedef struct {
Bitree Elem[maxsize];
int top;
}SqStack;
void InOrderUnrec(Bitree t) {
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s)) {
while (p!=null) { // 遍历左子树
push(s,p);
p=p->lchild;
} // endwhile
if (!StackEmpty(s)) {
p=pop(s);
visite(p->data); // 访问根结点
p=p->rchild; // [...]