完全二叉樹為什麼最適合順序儲存結構?

時間 2021-06-23 01:09:15

1樓:花露水和暖壺

先說明一下,只有完全二叉樹才能順序儲存,或者說順序儲存只適合於完全二叉樹,理由如下:

一般情況下,如果將樹的結點從上到下,每一層從左到右從1開始挨個編號,那麼結點 i 的左孩子就是2i,右孩子就是2i+1,將這個規律反映到順序儲存中,我們可以根據陣列的下標i也能找到左孩子(2i)和右孩子(2I+1),前提是陣列下標 i=0位丟棄不用,從i=1開始儲存樹的編號為1的根結點,以此類推,所以,這樣即使是將一棵樹順序儲存到了乙個一維陣列中,結點 i 的左孩子就是2i,右孩子就是2i+1這套公式照樣能夠使用。

假設現在一棵非完全二叉樹,拿一棵普通的二叉樹舉例,一棵普通二叉樹有5種形態(空樹、只有根結點、只有左子樹、只有右子樹、左右子樹都有),從形態上來看是一棵「殘缺不全」的二叉樹,如果從根結點開始從1 挨個編號,然後在存進一維陣列中,那麼有些結點可能沒有孩子,那麼它原本的孩子在陣列中的位置就會被後面上來的的結點佔據,這樣在陣列中再拿著2i或者2I+1找到的結點就不是實際情況下樹中結點的左右孩子(實際情況下樹中該結點可能甚至都沒有孩子),因此,之所以說順序儲存只適用於完全二叉樹,就是為了保證在一維陣列中仍舊能夠根據2i和2i+1去找左右孩子。

不知道我這麼說你是否能懂。

為什麼說「滿二叉樹也是完全二叉樹」?

一名 1 先明確完全二叉樹的概念。先上圖!完全二叉樹分為樓主所說的 圖1就是了 還有一種完全二叉樹是圖2。圖2也是完全二叉樹!圖2也是完全二叉樹!圖2也是完全二叉樹!概念 完全二叉樹分為兩種,1 最後一層沒有滿,那麼最後一層的節點都得在左邊。2 最後一層滿了,那就得全滿才行,圖2。完全二叉樹就這麼個...

2021 04 11 判斷二叉樹是否是完全二叉樹?

一鯨 const completeSize node node const sl completeSize left if sl 0 return 1 const sr completeSize right if sr 0 return 1 const fl sl 1 sl const fr sr ...

為什麼說二叉樹遍歷用遞迴的方法不如非遞迴方法

薛瑄 雖然從時間複雜度來看,二叉樹遍歷遞迴和迭代都是O logn 但是這裡的常係數相差甚大。也就是說遞迴 O a Logn 迭代是O b Logn 這裡的a b 用鄧教授更通俗的說法是,1秒和1年都是O 1 但是他們的常係數相差甚遠。B樹和平衡二叉搜尋樹,查詢時間複雜度是O logn 但是常係數相差...