二叉树的先根遍历
1.递归算法:
void PreOrder(BNode p)
{
if(p == NULL)
return;
visit(p);
PreOrder(p->lchild);
PreOrder(p->rchild);
}
2.非递归算法:
数据结构:
typedef PBinTreeNode DataType; //栈元素的类型是PBinTreeNode
struct SeqStack
{
DataType s[MAXNUM];
int t;
};
typedef struct SeqStack * PSeqStack;
程序代码:
void nPreOrder_btree(BinTree btree)
{
PSeqStack s;
PBinTreeNode c;
if(btree == NULL)
return;
s = createEmptyStack_seq();
push_seq(s,btree);
while(!isEmptyStack_seq(s))
{
c = top_seq(s);
pop_seq(s); //取栈顶,出栈
if(c != NULL)
{
visit(c);
push_seq(s,c->rlink); //右子女进栈
push_seq(s,c->llink); //左子女进栈
}
}
}