2

来週、アルゴリズムの試験があり、それに備えるための質問がありました。しかし、これらの質問の1つで私は困惑しました。

「7つの黒いノードと10の赤いノードで赤黒木を描くことができますか?なぜですか?」

すぐに答えられるように思えますが、気が進まないです。

CRLSは、n個の内部ノードを持つRBツリーの最大の高さを示します:2 * lg(n + 1)。

この補題だけで問題は解決できると思いますが、よくわかりません。

任意のヒント?

4

3 に答える 3

1

これは試験の準備なので、直接答えたくはありませんが、考慮する必要があるのは、赤黒木を構築する方法を決定するプロパティです。

  1. ノードは赤または黒のいずれかです。
  2. 根は黒です。(このルールは他の定義から省略されることがあります。ルートは常に赤から黒に変更できますが、必ずしもその逆ではないため、このルールは分析にほとんど影響しません。)
  3. すべての葉は黒です。
  4. すべての赤いノードの両方の子は黒です。
  5. 特定のノードからその子孫リーフへのすべての単純なパスには、同じ数の黒いノードが含まれています。

(ウィキペディアのページからこれらを盗んだ:http://en.wikipedia.org/wiki/Red-black_tree

リストしたノードの数を考えると、これらのすべてのプロパティを満たすことができますか?

于 2010-10-10T00:56:54.130 に答える
1

答えは簡単です。

私たちが知っているように、赤いノードは黒い親しか持つことができません。ノードの数は、各黒ノードの両方の子が赤である場合になります。したがって、すべての黒ノードには赤の親があります。したがって、「n」の場合、黒いノード「2n」の赤いノードが可能です。

このように考えてください:

  1. 最初のノード(ルート)を配置して黒にします
  2. 両方の子供を赤くする
  3. これらの赤いノードの両方の左右の子を黒にし、これらすべての黒いノードに対して、
  4. ブラックノード数が指定された値(この場合は7)に達するまで、rootの場合と同じ手順に従います。

これがソリューションの視覚化に役立つことを願っています。

于 2011-04-30T09:52:58.010 に答える
0

答えは、RBツリーがリーフで黒のダミーノードを使用しているかどうかによって大きく異なります。使用している場合は、7つの黒ノードの数に含まれます。そうでない場合は、7つの黒いノードの完全なツリーを検討してください

        *
       / \
      *   *
     /\   /\
    *  * *  *

10個の赤いノードを追加するのにそれほど問題はありません。

于 2011-05-13T13:16:14.153 に答える