(
在後序線索二叉樹中
① 若*p的左子樹為空
【例】在下圖所示的後序線索二叉樹中
② 若*p的左子樹非空
必是兩子樹中最後一個遍歷結點
當*p的右子樹非空時
【例】在上圖所示的後序線索二叉樹中
當*p無右子樹時
【例】在上圖所示的後序線索二叉樹中
(
具體的規律
① 若*p是根
② 若*p是其雙親的右孩子
【例】上圖所示的後序線索二叉樹中
③ 若*p是其雙親的左孩子
【例】上圖所示的後序線索二叉樹中
④ 若*p是其雙親的左孩子
左下的葉結點
【例】上圖所示的後序線索二叉樹中
注意
F是孩子樹中
由上述討論中可知
向其雙親結點的指針
幫助
(
【參見練習】
(
【參見參考書】
在前序線索二叉樹中
當樹中結點未設雙親指針時
遍歷某種次序的線索二叉樹
遍歷中序線索二叉樹算法
void TraverseInorderThrTree(BinThrTree p)
{ //遍歷中序線索二叉樹
if(p){//樹非空
while(p
p=p
do{
printf(
p=InorderSuccessor(p); //找*p的中序後繼
}while(p)
}//endif
}//TraverselnorderThrTree
分析
① 中序序列的終端結點的右線索為空
② 該算法的時間復雜性為O(n)
查找結點在指定次序下的前趨和後繼
③ 以上介紹的線索二叉樹是一種全線索樹(即左右線索均要建立)
④ 若在線索鏈表中增加一個頭結點
From:http://tw.wingwit.com/Article/program/sjjg/201311/23874.html