這裡我們使用中根遞迴的方法實現對二叉樹的線索化,步驟如下:
1.線索化當前結點的左子樹
2.對當前結點進行操作(重點):
①如果當前結點左子樹為空的話,將左引用指向當前節點的上乙個結點(我們用乙個變數來儲存上一次執行操作的結點);
②如果上乙個結點的右子樹為空的話,將上乙個結點的右引用置為當前結點。(當前操作我們是在為上一次的結點的有引用複製)。
3.線索化當前結點的右子樹
結點類定義:
public
class
node
線索化二叉樹的實現方法如下:
// 線索二叉樹裡指向當前結點的前乙個結點
private
static node pre = null;
public
static
void
threadedtree
(node node)
// 指向當前結點
node temp = node;
// 中根順序線索化左子樹
threadedtree
(temp.
getleft()
);// 為當前結點線索化
// 當前結點左孩子結點為空,讓其指向前驅節點
if(temp.
getleft()
== null)
// 當前結點的後繼結點其實是通過下一次的前驅節點來設定的
// 本次設定的是上一次的後繼節點
if(pre != null && pre.
getright()
== null)
// 操作完當前結點後,讓pre移動到temp位置
pre = temp;
// 中根順序線索化右子樹
線索化二叉樹以及遍歷線索化二叉樹
1.線索二叉樹基本介紹 n個結點的二叉鍊錶中含有n 1 公式 2n n 1 n 1 個空指標域。利用二叉鍊錶中的空指標域,存放指向該結點在某種遍歷次序下的前驅和後繼結點的指標 這種附加的指標稱為 線索 這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binaryt...
線索化二叉樹
define crt secure no warnings 1 includeusing namespace std enum pointertag 列舉 其結構如下 void prevorderthreading 前序 void postorderthreading 後序 void inorder...
線索化二叉樹
二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞迴或者用棧輔助實現非遞迴的遍歷。用二叉樹作為儲存結構時,取到乙個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。為了儲存這種在遍歷中需要的資訊,我們利用二叉樹中指向左右子樹的空指標來存放節點的前驅和後繼資訊.二叉樹的結...