あなたが言いたいことを理解していれば(レベル i の各ノードには n(i) 個の子がある)、非常に単純です。最初の数字は、ルートの子である n(0) 個の要素が続くルートです。これらの n(0) ノードは、n(1) ノードすべてにうなずきます。n(0) = 3 の場合、最初に n(1) 個のうなずきを配置し、その後に 2 番目のうなずきの場合はすべての n(1) 個のうなずきを配置し、それらの後に 3 番目のうなずきに n(1) 個のうなずきを配置します。うなずく
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}
適切なインデックスを作成するには、別の配列を親の位置で保持し、別の配列を最初の子のインデックスで保持する必要があります。または、本当に配列を 1 つだけ保持したい場合は、次のようにする必要があります。
要素ごとに、親のインデックスと最初の子のインデックスの 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 はノードのインデックスです。
多くの空きスペースがありますが、ヒープのような構造
お役に立てば幸いです。