建立线索二叉树和线索二叉树的遍历
递归建立中序线索二叉树
1.左子树线索化(返回修改后的pre);
2.当前结点p线索化
建前驱线索(当前结点左空,指向pre);
建后继线索(pre右空,pre指向当前结点);
重新修改前驱结点p指针为 pre;
3.右子树线索化(将新的pre输入)
-
void InThreading(BiThrTree &p, BiThrTree &pre) {
-
if (p) { // 对以p为根的非空二叉树进行中序线索化
-
InThreading(p->lchild, pre); // 左子树线索化
-
if (!p->lchild) // 空,建前驱线索
-
{ p->LTag = Thread; p->lchild = pre; }
-
if (!pre->rchild) // 空,建后继线索
-
{ pre->RTag = Thread; pre->rchild = p; }
-
pre = p; // 保持 pre 指向 p 的前驱
-
InThreading(p->rchild , pre); // 右子树线索化
-
} // if
-
} // InThreading
非递归中序线索化二叉树
非递归先序线索化二叉树
非递归遍历先序线索二叉树
非递归遍历中序线索二叉树

浙公网安备 33010602011771号