2011-07-22 9 views
2

あたりのノードの数が限られている木にフラットなリストに変換します。は、私は次のタスクのためのソリューションを検索してい深

今私は、次のルールでツリーに、このリストをtransfromしたい:

  • 私のリスト項目のすべてがツリーの深さあたりのノード数が一定数を制限する必要があります葉
  • する必要があります
  • ノードが無制限の深さで

をネストすることができ、私は木(kはレベルごとにノードの上限である)、それをk-aryのようなものだと思うが、多分この事はannother名前を持っています。

このタスクの背景は、放射状のツリー内の私のリストの視覚化の問題です。ラジアルツリーの最初のレベルにあるすべてのリーフを表示することは、あまりにも多い場合にはうまく見えません。だから私は、レベル制限に達したときに私のデータをグループ化するためにいくつかのノードを挿入する方が良いと思います。結果として得られるツリーは、リーフをより視覚的に表示することができるはずです。

このタスクには、アルゴリズムまたはさらに優れた実装がありますか?

ポインタまたは情報をありがとうございます。

+0

ツリーは、要素を何らかの特別な順序(たとえばソート済み)で保持するか、単にリストの順序で保持する必要がありますか? –

+0

特別注文はあまり重要ではありません。リスト項目には何らかの順序があります。 – user678898

+0

'k 'はあるレベルのノードの総数を制限しますか? K-aryは、内部ノードごとにk個の子ノード(レベルごとの制限なし)を意味し、これは異なるものです。 –

答えて

4

たとえば、Nとしましょう。リスト内のアイテムの数は4で、K=2です。これはバイナリツリーになります。

ステップ1:2つのノード

P1  P2 

1 2 3 4 

工程2の作成:2つのノードとリーフノードのK

P1  P2 
/\ /\ 
1 2 3 4 

ステップ3間のリンクを作成する別のノードを作成

 P5 

    P1  P2 
/\ /\ 
1 2 3 4 

手順4:作成した2つのノードとそのノードとの間のリンクを作成する

 P5 
    / \ 
    P1  P2 
/\ /\ 
1 2 3 4 

パターンを参照してください。あなたはこのようなNKのためにこれを繰り返し簡単に行うことができます。 NKの完全な力ではない場合について少し心配する必要があります。基本的には、すべてのノードの子の数は最大でも1台(N/K)です。

+0

レベルあたりの制約Kノード*はありませんか?これが当てはまる場合、葉レベルは制約を破ります。制約がノードごとにK個の子である場合は、もちろんOKです。 –

+0

あなたの努力に感謝します。それについて考える – user678898

関連する問題