.BiThrTree InOrder(BiThrTree TElemType x)
//先在帶頭結點的中序線索二叉樹T中查找給定值為x的結點假定值為x的結點存在
{p=T>lchild;//設p指向二叉樹的根結點
while(p!=T)
{while(p>ltag== && pdata!=x) p=p>lc;
if(p>data==x)return(p);
while(p>rtag== && p>rc!=T) {p=p>rc; if(p>data== x) return(p);}
p=p>rc; }
}//結束InOrder
BiThrTree AfterXNode(BiThrTree T)//在中序線索二叉樹T中求給定值為 x的結點的後繼結點
{BiThrTree p=InOrde(Tx); //首先在T 樹上查找給定值為x 的結點由p指向
if(p>rtag==) return(p>rc); //若p 的左標志為則p的rc指針指向其後繼
else {q=p>rc; while(q>ltag==)q=q>lc; return(q); }
//結點p的右子樹中最左面的結點是結點p的中序後繼
} }//結束AfterXnode
.[題目分析]後序遍歷是左右根因此若結點有右子女則右子女是其後序前驅否則左子女(或左線索)指向其後序前驅
BiThrTree PostSucc (BiThrTree Tp)//在後序線索二叉樹T中查找指定結點p的直接前驅q
{if(p>Rtag==) q=p>Rchild;//若p有右子女則右子女為其前驅
else q=p>Lchild; //若p無右子女左子女或左線索就是p的後序前驅
return (q);
}//結束PostSucc
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23702.html