java實現(xiàn)簡單的二叉樹 什么是二叉樹的順序存儲?
什么是二叉樹的順序存儲?這種結(jié)構(gòu)將二叉樹的所有節(jié)點按一定順序存儲在一個連續(xù)的存儲單元中。因此,必須將節(jié)點排列成適當?shù)木€性序列,使節(jié)點在序列中的對應(yīng)位置能夠反映節(jié)點之間的邏輯關(guān)系。這種結(jié)構(gòu)特別適用于幾乎
什么是二叉樹的順序存儲?
這種結(jié)構(gòu)將二叉樹的所有節(jié)點按一定順序存儲在一個連續(xù)的存儲單元中。因此,必須將節(jié)點排列成適當?shù)木€性序列,使節(jié)點在序列中的對應(yīng)位置能夠反映節(jié)點之間的邏輯關(guān)系。這種結(jié)構(gòu)特別適用于幾乎完全的二叉樹。在一個具有n個節(jié)點的近似完全二叉樹中,通過對所有節(jié)點從根開始、從上層到下層、從左到右逐層編號,可以得到一個反映整個二叉樹結(jié)構(gòu)的線性序列。存儲結(jié)構(gòu)值為:假設(shè)節(jié)點在數(shù)組中的位置為I,則其左子位置為2I,右子位置為2i1。(I從1開始)。所以您只需要創(chuàng)建一個數(shù)組,從鏈式存儲的根節(jié)點開始,按中間順序遍歷樹,然后按中間順序存儲在數(shù)組中。這樣就可以改變順序存儲結(jié)構(gòu)。你可以查看相關(guān)的遍歷信息,按遍歷的順序即訪問的順序是左子根右子。希望能對你有所幫助。
怎么將二叉樹順序存儲結(jié)構(gòu)圖轉(zhuǎn)化為二叉樹結(jié)構(gòu)呢?
最壞的情況是二叉樹是單個分支。例如,如果有一個k層,它的節(jié)點號也是k,所以它需要一個長度為2^k-1的數(shù)組來存儲,實際上它有k個節(jié)點。為什么?因為二叉樹的順序存儲是相對于完全二叉樹的。對于一般的二叉樹,如果相對于該二叉樹沒有這樣的節(jié)點,則應(yīng)該在數(shù)組中相應(yīng)的位置存儲一個ID來指示沒有這樣的節(jié)點。