- 论坛徽章:
- 0
|
二叉树后序遍历线索树的问题
利用栈遍历后序遍历后继线索二叉树算法如下
status PostOrderTraverse(ThreadedTree &T)
{
Stack S;p=T;InitStack(S);
if(!p->;ltag&&!p->;rtag)
{
visit(p->;data);
return;
}//T为独顶树
while(!p->;ltag││!p->;rtag)//p非叶子节点
{
if(!p->;ltag) p=p->;lchild;else p=p->;rchild;
Push(S,p);
}//找到后序遍历的第一个节点并记录父节点信息
visit(p->;data);
while(!StackEmpty(S))
{
Pop(S,q);
if(q==T) visit(q->;data);//弹出的为树根,直接访问
if(q->;rtag==Thread)&&(p==q->;lchild)//从左树返回根节点,没有右子树,则后继为根结点
{
p=q;
visit(p->;data);
}
if(q->;rtag!=Thread)&&(p==q->;rchild)//从右树返回根结点,后继为根节点
{
p=q;
visit(p->;data);
}
if(q->;rtag!=Thread)&&(p==q->;lchild)//从左树返回根结点,根结点有右子树,则后继为右子树后序遍历的第一个节点
{
Push(S,q);
r=q->;rchild ush(S,r);
while(!r->;rtag││!r->;ltag)
{
if(!r->;ltag) r=r->;lchild;else r=r->;rchild;
Push(S,r);
}
p=p->;rchild;
visite(p->;data);
}
}
}
觉得没有实际意义....
写得很仓促,有错误! |
|