如果我明白你想說什麼(每個節點在第一級有n(i)個孩子),那麼很簡單:第一個數字是根作爲根子的n(0)元素休耕的根,然後你把所有n(0)點都放在n(1)個節點上。 如果你有n(0)= 3,那麼第一次你把n(1)點頭,然後你把所有的n(1)點頭,如果第二個點頭,並且之後n(1)點頭爲3點頭
1 -> 2, 5, 3 (1 is the root, and has 2, 5, 3 as children)
2 -> 4, 10
3 -> 45, 35
5-> 12, 31
n(0) = 3, n(1) = 2 , n(2) = 0
Then You should have: {1, 2, 5, 3, 4, 10, 45, 35, 12, 31}
對於你應該保持與父親位置的另一個陣列和另一個與第一個孩子索引,如果你真的想只有一個數組,你應該做一個很好的指標:
對於每個元素保持3件事:父親索引和第一個孩子索引。 因爲孩子是一個接一個的,你將總是有機會獲得所有的孩子 ,你就會擁有父親。 (我會把-1根的父親) 那麼你應該有:
{1,-1, 3, 2, 0,12, 5, 0, x, 3, 0, x, 4, 3, x, ... }
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... }
-1 is the father of 1 and 3 is the start of his child
0 is the father of 1 and 12 is the start of his child (4 in this case)
如果你想要一個「堆」結構,你必須要找到孩子的最大號MX =(MAX(N(I) ),1 < = i < = N並且做一個步驟爲MX的堆,每個元素將有他們的孩子在pos * MX,pos * MX + 1,..pos * MX + n(k),並且父親在pos/MX,其中pos是該節點的索引。
你將有很多自由空間的,但是是一個堆狀stuture
我希望它可以幫助你。
你在找什麼可能與succinc t數據結構,使用接近信息理論最小位數的數據結構的表示。我不知道任何這樣的表示,但我很想知道它們是否存在。 – templatetypedef