は、私がリンクされたリストのレベルを使用します(この方式はまたCelkoツリーを呼び出しています)。
message1
message2
message3
message4
message5
message6
message7
各ノードは、そのポインタなければなりません:各レベル内
- forward sibling (2->5, 3->4, 5->6, 1/4/6/7->NULL).
- backward sibling (4->3, 5->2, 6->5, 1/2/3/7->NULL).
- first child (1->2, 2->3, 6->7, 3/4/5/7->NULL).
- parent (2->1, 3->2, 4->2, 5->1, 6->1, 7->6, 1->NULL).
を、メッセージが投票数(またはあなたが使用したいものは何でも他のスコア)により、リストにソートされます。
これは、物を動かすための最大限の柔軟性を提供し、親とそのレベルのリンクを変更するだけでサブツリー全体(たとえば、message2
)を移動することができます。
たとえば、message6
は、message5
よりも一般的な投票になります。 (次および前の兄弟ポインタの両方を調整すること)されている変更:
message2 -> message6
message6 -> message5
message5 -> NULL
。
取得する:
message1
message2
message3
message4
message6
message7
message5
を、それがmessage2
よりも多くの票を穀倉までそれが続く場合は、次のことが発生します。
message6 -> message2
message2 -> message5
とmessage1
の第一子のポインタを取得するには、まだ、(それはmessage2
だった)message6
に比較的容易に設定されている:
message1
message6
message7
message2
message3
message4
message5
だけ再発注になってきたメッセージにするとき、スコアの変更結果を発生する必要がありますその上の兄弟よりも大きいか、またはそのより低い兄弟よりも小さい。スコアを変更するたびに再注文する必要はありません。
うわー!これを説明する時間をとってくれてありがとう。それは有り難いです。 – Hula