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