【正确答案】
【答案解析】二叉树先序遍历的思想是从根结点开始,沿左子树一直走到没有左孩子的结点为止,依次访问所经过的结点,同时所经结点的地址进栈,当找到没有左孩子的结点时,从栈顶退出该结点的双亲的右孩子。此时,此结点的左子树已访问完毕,再用上述方法遍历该结点的右子树,如此重复到栈空为止。先序遍历的具体实现代码如下:
void PreOrder(BTree*tree)
{
if(tree==NULL)
return;
Operator(tree->data);
if(tree->lchild!=NULL)
PreOrder(tree->1child);
if(tree->rchild!=NULL)
PreOrder(tree->rchild);
}
二叉树中序遍历的思想是从根结点开始,沿左子树一直走到没有左孩子的结点为止,并将所经结点的地址进栈,当找到没有左孩子的结点时,从栈顶退出该结点并访问它。此时,此结点的左子树已访问完毕,再用上述方法遍历该结点的右子树,如此重复到栈空为止。中序遍历的具体实现代码如下:
void MidOrder(BTree*tree)
{
if(tree==NULL)
return;
if(tree->1child!=NULL)
MidOrder(tree->1child);
Operator(tree->data);
if(tree->rchild!=NULL)
MidOrder(tree->rchild);
}
二叉树后序遍历的思想是从根结点开始,沿左子树一直走到没有左孩子的结点为止,并将所经结点的地址第一次进栈,当找到没有左孩子的结点时,此结点的左子树已访问完毕,从栈顶退出该结点,判断该结点是否为第一次进栈。如果是,再将所经结点的地址第二次进栈,并沿该结点的右子树一直走到没有右孩子的结点为止;如果不是,则访问该结点。此时,该结点的左右子树都已完全遍历,且令指针p=NULL,如此重复直到栈空为止。后序遍历的具体实现代码如下:
void PostOrder (BTree*tree)
{
if(tree==NULL)
return;
if(tree->1child!=NULL)
PostOrder(tree->1child);
if(tree->rchild!=NULL)
PostOrder(tree->rchild);
Operator(tree->data);
}