Exemplo n.º 1
0
 RandomTreeNode(int k)
 {
     key  = k;
     left = right = null;
     size = 1;
     data = new byte[32];
 }
Exemplo n.º 2
0
 RandomTreeNode(int k, byte[] d)
 {
     key  = k;
     left = right = null;
     size = 1;
     data = d;
 }
Exemplo n.º 3
0
 static private int GetSize(RandomTreeNode p)
 {
     if (p == null)
     {
         return(0);
     }
     return(p.size);
 }
Exemplo n.º 4
0
 static public RandomTreeNode Insert(RandomTreeNode p, int k, byte[] d) {
     if(p == null) return new RandomTreeNode(k, d);
     if(rnd.Next(p.size + 1) == 0)
         return InsertRoot(p, k, d);
     if(p.key > k)
         p.left = Insert(p.left, k, d);
     else
         p.right = Insert(p.right, k, d);
     FixSize(p);
     return p;
 }
Exemplo n.º 5
0
 public RandomTreeNode FindGreatestNotGreater(int k, RandomTreeNode max = null) {
     if(key < k && (max == null || key>max.key)) {
         max = this;
     }
     if(k == key)
         return this;
     if(k < key)
         return left == null ? max : left.FindGreatestNotGreater(k, max);
     else
         return right == null ? max : right.FindGreatestNotGreater(k, max);
 }
Exemplo n.º 6
0
        static private RandomTreeNode rotateleft(RandomTreeNode q)
        {
            RandomTreeNode p = q.right;

            if (p == null)
            {
                return(q);
            }
            q.right = p.left;
            p.left  = q;
            p.size  = q.size;
            FixSize(q);
            return(p);
        }
Exemplo n.º 7
0
        static private RandomTreeNode rotateright(RandomTreeNode p)
        {
            RandomTreeNode q = p.left;

            if (q == null)
            {
                return(p);
            }
            p.left  = q.right;
            q.right = p;
            q.size  = p.size;
            FixSize(p);
            return(q);
        }
Exemplo n.º 8
0
 static private RandomTreeNode InsertRoot(RandomTreeNode p, int k, byte[] d)
 {
     if (p == null)
     {
         return(new RandomTreeNode(k, d));
     }
     if (k < p.key)
     {
         p.left = InsertRoot(p.left, k, d);
         return(rotateright(p));
     }
     else
     {
         p.right = InsertRoot(p.right, k, d);
         return(rotateleft(p));
     }
 }
Exemplo n.º 9
0
 public RandomTreeNode FindGreatestNotGreater(int k, RandomTreeNode max = null)
 {
     if (key < k && (max == null || key > max.key))
     {
         max = this;
     }
     if (k == key)
     {
         return(this);
     }
     if (k < key)
     {
         return(left == null ? max : left.FindGreatestNotGreater(k, max));
     }
     else
     {
         return(right == null ? max : right.FindGreatestNotGreater(k, max));
     }
 }
Exemplo n.º 10
0
 static public RandomTreeNode Insert(RandomTreeNode p, int k, byte[] d)
 {
     if (p == null)
     {
         return(new RandomTreeNode(k, d));
     }
     if (rnd.Next(p.size + 1) == 0)
     {
         return(InsertRoot(p, k, d));
     }
     if (p.key > k)
     {
         p.left = Insert(p.left, k, d);
     }
     else
     {
         p.right = Insert(p.right, k, d);
     }
     FixSize(p);
     return(p);
 }
Exemplo n.º 11
0
 static public RandomTreeNode Remove(RandomTreeNode p, int k)
 {
     if (p == null)
     {
         return(p);
     }
     if (p.key == k)
     {
         RandomTreeNode q = join(p.left, p.right);
         p = null;
         return(q);
     }
     else if (k < p.key)
     {
         p.left = Remove(p.left, k);
     }
     else
     {
         p.right = Remove(p.right, k);
     }
     return(p);
 }
Exemplo n.º 12
0
 static private RandomTreeNode join(RandomTreeNode p, RandomTreeNode q)
 {
     if (p == null)
     {
         return(q);
     }
     if (q == null)
     {
         return(p);
     }
     if (rnd.Next(p.size + q.size) < p.size)
     {
         p.right = join(p.right, q);
         FixSize(p);
         return(p);
     }
     else
     {
         q.left = join(p, q.left);
         FixSize(q);
         return(q);
     }
 }
Exemplo n.º 13
0
 static private RandomTreeNode InsertRoot(RandomTreeNode p, int k, byte[] d) {
     if(p == null) return new RandomTreeNode(k, d);
     if(k < p.key) {
         p.left = InsertRoot(p.left, k, d);
         return rotateright(p);
     } else {
         p.right = InsertRoot(p.right, k, d);
         return rotateleft(p);
     }
 }
Exemplo n.º 14
0
 RandomTreeNode(int k, byte[] d) {
     key = k;
     left = right = null;
     size = 1;
     data = d;
 }
Exemplo n.º 15
0
 RandomTreeNode(int k) {
     key = k;
     left = right = null;
     size = 1;
     data = new byte[32];
 }
Exemplo n.º 16
0
 public void Remove(int key) {
     root = RandomTreeNode.Remove(root, key);
 }
Exemplo n.º 17
0
 public void Insert(int key, byte[] data) {
     root = RandomTreeNode.Insert(root, key, data);
 }
Exemplo n.º 18
0
 static private RandomTreeNode join(RandomTreeNode p, RandomTreeNode q) {
     if(p == null) return q;
     if(q == null) return p;
     if(rnd.Next(p.size + q.size) < p.size) {
         p.right = join(p.right, q);
         FixSize(p);
         return p;
     } else {
         q.left = join(p, q.left);
         FixSize(q);
         return q;
     }
 }
Exemplo n.º 19
0
 static private RandomTreeNode rotateleft(RandomTreeNode q) {
     RandomTreeNode p = q.right;
     if(p == null) return q;
     q.right = p.left;
     p.left = q;
     p.size = q.size;
     FixSize(q);
     return p;
 }
Exemplo n.º 20
0
 static private RandomTreeNode rotateright(RandomTreeNode p) {
     RandomTreeNode q = p.left;
     if(q == null) return p;
     p.left = q.right;
     q.right = p;
     q.size = p.size;
     FixSize(p);
     return q;
 }
Exemplo n.º 21
0
 static private void FixSize(RandomTreeNode p) {
     p.size = GetSize(p.left) + GetSize(p.right) + 1;
 }
Exemplo n.º 22
0
 static private int GetSize(RandomTreeNode p) {
     if(p == null) return 0;
     return p.size;
 }
Exemplo n.º 23
0
 public RandomTree() {
     root = null;
 }
Exemplo n.º 24
0
 static private void FixSize(RandomTreeNode p)
 {
     p.size = GetSize(p.left) + GetSize(p.right) + 1;
 }
Exemplo n.º 25
0
 public void Insert(int key, byte[] data)
 {
     root = RandomTreeNode.Insert(root, key, data);
 }
Exemplo n.º 26
0
 public void Remove(int key)
 {
     root = RandomTreeNode.Remove(root, key);
 }
Exemplo n.º 27
0
 static public RandomTreeNode Remove(RandomTreeNode p, int k) {
     if(p == null) return p;
     if(p.key == k) {
         RandomTreeNode q = join(p.left, p.right);
         p = null;
         return q;
     } else if(k < p.key)
         p.left = Remove(p.left, k);
     else
         p.right = Remove(p.right, k);
     return p;
 }
Exemplo n.º 28
0
 public RandomTree()
 {
     root = null;
 }