Advertisement
punidota

Untitled

Mar 16th, 2016
406
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.42 KB | None | 0 0
  1. public void Add(T key, T value)
  2.     {
  3.         var node = Insert(root, key, value, Height);
  4.         N++;
  5.         if (node == null) return;
  6.         var newNode = new Node(2);
  7.         newNode.children[0] = new Child(root.children[0].key, default(T), root);
  8.         newNode.children[1] = new Child(node.children[0].key, default(T), node);
  9.         root = newNode;
  10.         HT++;
  11.     }
  12.  
  13.     private Node Insert(Node _node, T key, T value, int height)
  14.     {
  15.         int j;
  16.         var t = new Child(key, value, null);
  17.         if (height == 0)
  18.         {
  19.             for (j = 0; j < _node.NumChildren; j++)
  20.             {
  21.                 if (key.CompareTo(_node.children[j].key) < 0) break;
  22.             }
  23.         }
  24.         else
  25.         {
  26.             for (j = 0; j < _node.NumChildren; j++)
  27.             {
  28.                 if ((j + 1 == _node.NumChildren) || key.CompareTo(_node.children[j + 1].key) < 0)
  29.                 {
  30.                     var u = Insert(_node.children[j++].next, key, value, height - 1);
  31.                     if (u == null) return null;
  32.                     t.key = u.children[0].key;
  33.                     t.next = u;
  34.                     break;
  35.                 }
  36.             }
  37.         }
  38.  
  39.         for (int i = _node.NumChildren; i > j; i--) _node.children[i] = _node.children[i - 1];
  40.         _node.children[j] = t;
  41.         _node.NumChildren++;
  42.         return _node.NumChildren < M ? null : Split(_node);
  43.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement