天天看點

數組順序存儲二叉樹

1.完全二叉樹

    完全二叉樹由于其結構上的特點,通常采用順序存儲方式存儲。一棵有n個結點的完全二叉樹的所有結點從1到n編号,就得到結點的一個線性系列。

    如下圖:完全二叉樹除最下面一層外,各層都被結點充滿了,每一層結點的個數恰好是上一層結點個數的2倍,是以通過一個結點的編号就可以推知它的雙親結點及左,右孩子結點的編号:

① 當 2i ≤ n 時,結點 i 的左孩子是 2i,否則結點i沒有左孩子;

② 當 2i+1 ≤ n 時,結點i的右孩子是 2i+1,否則結點i沒有右孩子;

③ 當 i ≠ 1 時,結點i的雙親是結點 i/2;

數組順序存儲二叉樹

注意:由于數組下标從0開始,用數組模拟二叉樹(當然也包括堆)的話,如果根節點的下标為0的話,則對于每個結點i,其左孩子下标為2*i+1;其右孩子下标為2*i+2。

2.一般二叉樹

    對于一般的二叉樹,如果仍按照從上至下,從左到右的順序将樹中的結點順序存儲在一維數組中,則數組元素下标之間的關系不能夠反映二叉樹中結點之間的邏輯關系。

    這時假設将一般二叉樹進行改造,增添一些并不存在的空結點,使之成為一棵完全二叉樹的形式,然後再用一維數組順序存儲。在二叉樹中假設增添的結點在數組中所對應的元素值為"空"用^表示。

數組順序存儲二叉樹

參考博文:

<a href="http://tech.ddvip.com/2014-05/1400680475210602.html" target="_blank">http://tech.ddvip.com/2014-05/1400680475210602.html</a>