二叉树的中根遍历
1.递归算法:
void PreOrder(BNode p)
{
if(p == NULL)
return;
PreOrder(p->lchild);
visit(p);
PreOrder(p->rchild);
}
2.非递归算法:
思路:从二叉树的根结点,令变量c为根结点。若c不为空时,则令c沿其左子女结点前进,在前进过程中,把所经历的结点逐个压入栈中,当c为空时,弹出栈顶元素送给c,并访问该结点,再令c为当前结点的右子女结点。重复上述过程,当c为空并且栈也为空时,遍历结束。
程序代码:
void nInOrder(BNode btree)
{
PSeqStack s; //栈元素的类型是BNode
PBinTreeNode c;
if(btree == NULL)
return;
s = createEmptyStack_seq();
c = btree;
while( c != NULL || !isEmptyStack_seq(s))
{
while( c != NULL)
{
push_seq(s,c);
c = c->llink;
}
c = top_seq(s);
pop_seq(s);
visit(c);
c = c->rlink;
}
}