3.3.17

3.3.17 #

解答 #

创建一个数组并随机打乱即可,下面是两个例子:

G,A,E,K,H,D,F,L,C,O,I,B,M,P,J,N
|-------------------------------G-------------------------------|
A---------------|                               |---------------K---------------|
        |-------E-------|                       H-------|                       L-------|
    |---D               F                               I---|                       |---O---|
  |-C                                                       J                       M-|     P
  B                                                                                   N

                            ||-------------------------------L-------------------------------|
            |---------------E---------------|                               |---------------O---------------|
    |-------C-------|               ||-------J-------|               ||-------N                               P
||---B               D           |---H---|           K               M
A                             ||-G       I
                              F

第二个例子:

A,N,C,J,F,O,B,M,P,L,K,D,E,H,G,I
A---------------------------------------------------------------|
                                |-------------------------------N-------------------------------|
                |---------------C---------------|                                               O---------------|
                B                       |-------J-------|                                                       P
                                    |---F---|       |---M
                                    D-|   |-H-|   |-L
                                      E   G   I   K

              ||---------------J---------------|
      |-------E-------|               ||-------N-------|
  |---C---|       |---G---|       |---L---|       ||---P
||-B       D       F     ||-I       K       M       O
A                       H

代码 #

using BalancedSearchTree;

var keys = Enumerable.Range(0, 16).Select(x => (char)('A' + x)).ToArray();
Shuffle(keys);

var bst = new Bst<char, int>();
var redBlackTree = new RedBlackBst<char, int>();

foreach (var key in keys)
{
    bst.Put(key, 1);
    redBlackTree.Put(key, 1);
}

Console.WriteLine(string.Join(',', keys));
Console.WriteLine(bst);
Console.WriteLine(redBlackTree);

static void Shuffle<T>(T[] keys)
{
    var random = new Random();
    var length = keys.Length;
    for (var i = 0; i < length; i++)
    {
        var r = i + random.Next(length - i);
        var t = keys[r];
        keys[r] = keys[i];
        keys[i] = t;
    }
}