1.递归算法:
void PreOrder(BNode p)
{
if(p == NULL)
return;
PreOrder(p->lchild);
PreOrder(p->rchild);
visit(p);
}
2.非递归算法:
程序代码:
struct Elem
{
BNode ptr;
int tag;
};
void nPostOrder(BTree btree)
{
stack s;
Elem s_node;
BNode p;
if(btree == NULL)
return;
s = createEmptyStack(s);
p = btree;
do
{
while(p != NULL)
{
s_node.ptr = p;
s_node.tag = 1;
push(s,s_node);
p = p->llink;
}
while(!isEmpty(s))
{
s_node = top(s);
pop(s);
p = s_node.ptr;
if(s_node.tag == 1)
{
s_node.tag = 2;
push(s,s_node);
p = p->rlink;
break;
}
else
visit(p);
}while(!isEmptyStack(s));
}