什麼是線索二叉樹?

2021-10-09 00:10:46 字數 1037 閱讀 8833

定義:乙個二叉樹通過如下的方法「穿起來」:所有原本為空的右(孩子)指標改為指向該節點在中序序列中的後繼,所有原本為空的左(孩子)指標改為指向該節點的中序序列的前驅。

線索二叉樹能線性地遍歷二叉樹,從而比遞迴的中序遍歷更快。使用線索二叉樹也能夠方便的找到乙個節點的父節點,這比顯式地使用父親節點指標或者棧效率更高。這在棧空間有限,或者無法使用儲存父節點的棧時很有作用(對於通過深度優先搜尋來查詢父節點而言)。

考慮這樣的例子:乙個節點k有乙個右孩子r,那麼r的左指標可能是指向乙個孩子節點,或是乙個指回k的線索。如果r有左孩子,這個左孩子同樣也應該有乙個左孩子或是指回k的線索。對於所有的左孩子同理。因此沿著這些從r發出的左指標,我們最終會找到乙個指回k的線索。這種特性是對稱的:當q是p的左孩子時,我們可以沿著q的右孩子找到乙個指回p的線索。

傳統的二叉樹一般都是以鏈式儲存的結構來表示。這樣,二叉樹中的每個節點都可以用鍊錶中的乙個鏈節點來儲存,每個鏈節點就包含了若干個指標。但是,這種傳統的鏈式儲存結構只能表現出二叉樹中節點之間的父子關係,而且不能利用空餘的指標來直接得到某個節點的在特定的遍歷順序(先序,中序,後序)中的直接前驅和直接後繼。

通過分析傳統的二叉樹鏈式儲存結構表示的二叉樹中,存在大量的空閒指標。若能利用這些空指標域來存放指向該節點的直接前驅或是直接後繼的指標,則可以進行某些更方便的運算。這些被重新利用起來的空指標就被稱為線索,加上了這些線索的二叉樹就是線索二叉樹。

線索化:對二叉樹以某種遍歷順序進行掃瞄並為每個節點新增線索的過程稱為二叉樹的線索化。

進行線索化的目的是為了加快查詢二叉樹中某節點的前驅和後繼的速度。 那麼在有n個節點的二叉樹中需要利用n+1個空指標新增線索。這是因為在n個節點的二叉樹中,每個節點有2個指標,所以一共有2n個指標,除了根節點以外每乙個節點都有乙個指標從它的父節點指向它,所以一共使用了n-1個指標。所以剩下2n-(n-1)個空指標。

線索二叉樹

當用二叉鍊錶作為二叉樹的儲存結構時,因為每個結點中只有指向其左 右兒子結點的指標,所以從任一結點出發只能直接找到該結點的左 右兒子。在一般情況下靠它無法直接找到該結點在某種遍歷序下的前驅和後繼結點。如果在每個結點中增加指向其前驅和後繼結點的指標,將降低儲存空間的效率。我們可以證明 在n個結點的二叉鍊...

線索二叉樹

1.線索二叉樹結構和操作定義 threadbintree.h 功能 線索標誌域所有值 typedef enumnodeflag 功能 線索二叉樹結構體 typedef struct threadtreethreadbintree 前驅節點指標 threadbintree previous null ...

線索二叉樹

原始碼 中序線索二叉樹 author 菜鳥 version 2014.7.23 include include include typedef char datatype using namespace std 定義線索二叉樹的結構體 typedef struct nodethreadbitreen...