/**********
【题目】假设在三叉链表的结点中增设一个标志域
(mark取值0,1或2)以区分在遍历过程中到达该结点
时应继续向左或向右或访问该结点。试以此存储结
构编写不用栈辅助的二叉树非递归后序遍历算法。
带标志域的三叉链表类型定义:
typedef struct TriTNode {
TElemType data;
struct TriTNode *lchild, *rchild, *parent;
int mark; // 标志域
} TriTNode, *TriTree;
**********/
void PostOrder(TriTree T, void (*visit)(TElemType))
/* 不使用栈,非递归后序遍历二叉树T, */
/* 对每个结点的元素域data调用函数visit */
{
TriTree p = T;
while(p != NULL){
while(p -> lchild != NULL && p->mark == 0){
if(p -> rchild == NULL){
p -> mark = 2;
}
else{
p -> mark = 1;
}
p = p -> lchild;
}
if(p -> rchild){
p -> mark = 2;
p = p->rchild;
}
else{
visit(p -> data);
do{
p = p->parent;
if(p->mark == 2) {
visit(p -> data);
}
}while(p->mark == 2);
}
}
}
三叉链表后序遍历
最新推荐文章于 2021-10-04 22:46:38 发布