線索二叉樹怎麼畫 二叉樹

2021-10-11 15:16:10 字數 2304 閱讀 2077

二叉樹是一種特殊的樹,簡單說每個結點 最多 有兩個子樹,且左右子樹是有順序的。

對於一棵具有

完全二叉樹。在二叉樹的第

深度為

對於任何一棵二叉樹 t ,如果其終端結點數為

,度為 2的結點數為

,則 。 對於滿二叉樹這一性質很好證明:

。 對於普通二叉樹該怎麼理解呢? 假設在

層存在度為1的結點,則終端結點減少

個,減少的度為2的結點數為

,所以對於普通二叉樹也滿足該性質。

具有 個結點的完全二叉樹的深度為

。 對於完全二叉樹來說,其結點數存在關係

。因為深度為整數,故有

,則 ,則可證。

如果對於一棵有

個結點的完全二叉樹(其深度為

)的結點按照層序編號(從第1層到第

層,每層從左到右),對任一結點

有: 如果

,則結點

是二叉樹的根,無雙親;如果

,則其雙親是結點

。如果 ,則結點

無左孩子(結點

為葉子結點);否則其左孩子是結點

。如果 ,則結點

無右孩子;否則其右孩子是結點

由其結構特徵可以得知:順序結構多用於完全二叉樹。

二叉鍊錶

規則:根結點 -> 左結點 -> 右結點

規則:左結點 -> 根結點 -> 右結點

規則:左結點 -> 右結點 -> 根結點

層序遍歷

這幾種遍歷方式都是將樹中的結點轉換為某種意義的線性序列,這會對程式的執行帶來好處。
已知前序遍歷序列和中序遍歷序列,可以唯一確定一棵二叉樹;

已知後序遍歷序列和中序遍歷序列,可以唯一確定一棵二叉樹;

但是已知前序和後序遍歷序列,是不可以唯一確定一棵二叉樹的。

線索二叉樹原理

由圖中可以發現該二叉樹結構中存在很多空指標域。其中數目有多少呢? 假設二叉樹中有

個結點,則指標域有

個。而

個結點則有

條分支線段,因此空指標域有

個。可見空指標域數量不少,如何利用呢?

先看上圖二叉樹結構中的問題有什麼呢?在遍歷的過程中不知道結點的前驅和後繼是哪乙個結點。所以我們可以利用那些空指標,存放指向結點在某種遍歷次序下的前驅和後繼結點的位址。我們把這種指向前驅或後繼結點的指標稱為線索,加上線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹就稱為線索二叉樹(threaded binary tree)。

上圖為將二叉樹中序遍歷後,將所有空指標域中的rchild指向它的後繼結點。

上圖中將空指標域中的lchild指向它的前驅結點。 結合上面兩張圖可以看出:線索二叉樹將二叉樹轉換為雙向鍊錶。 二叉樹以某種次序遍歷使其變為線索二叉樹的過程稱為線索化

這時候還有問題沒有解決,僅憑上面的結構無法判斷乙個結點rchild/lchild內儲存的是後繼節點/前驅結點還是右孩子/左孩子。所以這時候引入區分標誌:

所以,最終的結構為

二叉樹之 線索二叉樹

二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞迴或者用棧輔助實現非遞迴的遍歷。用二叉樹作為儲存結構時,取到乙個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。為了儲存這種在遍歷中需要的資訊,我們利用二叉樹中指向左右子樹的空指標來存放節點的前驅和後繼資訊 對於n個結...

樹 二叉樹 線索二叉樹

一 線索二叉樹 1 什麼是線索化 將二叉樹以某種次序將其遍歷,得到線性序列,就是將非線性結構進行線索化。線索化的優點就是可以很快地得到前驅或後繼。如果儲存線索化的線性序列 儲存二叉樹地線索化序列的其中一種方法就是在結點上加兩個指標,乙個指向前驅乙個指向後繼,這樣的缺點就是儲存密度大大降低。另一種方法...

線索二叉樹

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