1.二叉樹的遍歷實質上是對一個非線性結構進行線性化的過程,它使得每一個節點(除第一個和最後一個)在這些線性序列中有且僅有一個直接前驅和直接後繼。但在二叉鏈表存儲結構中,只能找到一個節點的左、右孩子,不能直接獲得節點在任一遍歷序列中的前驅和後繼,這些信息只有在遍歷的動態過程當中才能獲得,所以引入線索二叉樹來保存這些動態過程獲得的信息。 2.創建線索二叉樹 爲了保存節點在任一序列中的前驅和後繼信息,能夠考慮在每一個節點中增長兩個指針域來存放遍歷時獲得的前驅和後繼信息,這樣就能夠爲之後的訪問帶來方便。但增長指針信息會下降存儲空間的利用率,所以能夠考慮其餘方法。 若n個節點的二叉樹採用二叉鏈表作存儲結構,則鏈表中必然有n+1個空指針域,能夠利用這些空指針域來存放節點的前驅和後繼信息。爲此,須要在節點中增長標誌ltag和rtag,以區分孩子指針的指向,以下所示。指針
ltag | lchild | data | rchild | rtag |
---|
其中 ltag= $$ f(x)=\left{ \begin{aligned} x & = & \cos(t) \ y & = & \sin(t) \ z & = & \frac xy \end{aligned} \right. $$table