回 帖 发 新 帖 刷新版面

主题:写算法,帮忙啊大家。

假设在二叉树链表中增加两个域
双亲域(parents)标志域(mark   取0 1 2分别表示向左,向右,访问该结点)
试以此编写不用栈进行后序遍历的算法。

回复列表 (共1个回复)

沙发

带双亲指针和标志域的二叉链表类型定义:
typedef struct BiPTNode {
  TElemType data;
  BiTNode  *lchild, *rchild, *parent;
  int       mark;
} BiPTNode, *BiPTree;

void PostOrder(BiPTree bt, void (*visit)(TElemType))
/* 不使用栈,非递归后序遍历二叉树bt,  */
/* 对每个结点的元素域data调用函数visit */
{
 BiPTree p;
 p=bt;
 while(p)
 switch(p->mark)
   {
    case 0:
           p->mark=1;
           if(p->lchild) p=p->lchild; //先访问左子树
           break;
    case 1:
           p->mark=2;
           if(p->rchild) p=p->rchild; //再访问右子树
           break;
   case 2:
          visit(p->data);          
          p->mark=0;              //恢复mark值
          p=p->parent;           //返回双亲结点
  }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册