后序线索树中结点的后继要么是其右线索(当结点的rtag=时)要么是其双亲结点右子树中最左下的叶子结点所以只有当二叉树只有根或树中任一结点均无右子树时进行遍历才不用栈其遍历程序段如下
while(p>ltag==)p==p>lchild; //找最左下叶子结点
while(p>rchild!=null){visit(p>data); //访问结点
p=p>rchild;} //沿线索向上
对前序线索二叉树当二叉树非空时若其结点有左子女(ltag=)左子女是后继否则若结点有右子女(rtag=)则右子女是后继若无右子女(rtag=)右子女是线索也指向后继所以对任何前序线索二叉树进行前序遍历均不需使用栈
.左右子树均不空的二叉树先序线索化后空指针域为个(最后访问结点的右链为空)
.if(p>ltag==) return(p>lchild);//左子女不空左子女为直接后继结点
else return(p>rchild); //左子女空右子女(或右线索)为后继
后序线索树中结点的后继(根结点无后继)要么是其右线索(当结点的rtag=时)要么是其双亲结点右子树中最左下的叶子结点对中序线索二叉树某结点若其左标记等于则左子女为线索指向直接前驱否则其前驱是其左子树上按中序遍历的最后一个结点
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []