主题:写算法,帮忙啊大家。
yunyifeng
[专家分:10] 发布于 2006-05-21 00:07:00
假设在二叉树链表中增加两个域
双亲域(parents)标志域(mark 取0 1 2分别表示向左,向右,访问该结点)
试以此编写不用栈进行后序遍历的算法。
回复列表 (共1个回复)
沙发
海上飞洪 [专家分:520] 发布于 2006-05-21 01:07:00
带双亲指针和标志域的二叉链表类型定义:
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; //返回双亲结点
}
}
我来回复