二叉樹的鏈式存儲結構 C語言中.二叉樹的順序存儲結構和二叉鏈表,三叉鏈表存儲結構各自的優(yōu)缺點及適用場合.以及2叉樹的順序儲存結?
C語言中.二叉樹的順序存儲結構和二叉鏈表,三叉鏈表存儲結構各自的優(yōu)缺點及適用場合.以及2叉樹的順序儲存結?鏈式結構優(yōu)點都是便于尋址,二叉鏈表缺點結構性開銷隨著數(shù)據結構的規(guī)模變大而變大(尤其是葉子節(jié)點都
C語言中.二叉樹的順序存儲結構和二叉鏈表,三叉鏈表存儲結構各自的優(yōu)缺點及適用場合.以及2叉樹的順序儲存結?
鏈式結構優(yōu)點都是便于尋址,二叉鏈表缺點結構性開銷隨著數(shù)據結構的規(guī)模變大而變大(尤其是葉子節(jié)點都有2個NULL,即損失2*sizeof(ElemType*))
線性結構優(yōu)點沒有結構性開銷,缺點個人感覺是插入和刪除不夠方便?
試用場合估計取決問題規(guī)模大小,即空間復雜度和時間復雜度
兩個相互轉化很簡單,只需明白的就是順序存儲中:
當前節(jié)點的父節(jié)點Parent(CurrentPos) = (CurrentPos - 1) / 2 取下界
左孩子Left(CurrentPos) = 2*CurrentPos 1
右孩子Right(CurrentPos) = 2*CurrentPos 2
左兄弟 = CurrentPos - 1
右兄弟 = CurrentPos 1
轉換時只需講鏈式存儲結構的數(shù)據域的數(shù)據拷貝到順序存儲結構對應的位置即可
怎么將二叉樹順序存儲結構圖轉化為二叉樹結構呢?
。而存儲結構值的是:假設該結點在數(shù)組中的位置為i,則它的左兒子的位置為2i,右兒子為2i 1.(i從1開始)所以你只要創(chuàng)建一個數(shù)組,從鏈式存儲的根節(jié)點開始,用中序遍歷遍歷樹,按中序遍歷的順序存儲在數(shù)組中。即可完成順序存儲結構的轉化。相關的遍歷你可以查看相關資料,中序遍歷即訪問順序為左兒子-根-右兒子的順序訪問。希望對你有所幫助。
什么是二叉樹的順序存儲?
此結構是將二叉樹的所有結點, 按照一定的次序,存儲到一片連續(xù)的存儲單元中。 因此,必須將結點排成一個適當?shù)木€性序列, 使得結點在這個序列中的相應位置能反映出結點之間的邏輯關系。 這種結構特別適用于近似滿二叉樹。 在一棵具有n個結點的近似滿二叉樹中, 我們從樹根起,自上層到下層,逐層從左到右給所有結點編號,就能得到一個足以反映整個二叉樹結構的線性序列