Exemple #1
0
 public void Insert(int data)
 {
     if (data < Data)
     {
         if (Left == null)
         {
             Left = new RandomNode(data);
         }
         else
         {
             Left.Insert(data);
         }
     }
     if (data >= Data)
     {
         if (Right == null)
         {
             Right = new RandomNode(data);
         }
         else
         {
             Right.Insert(data);
         }
     }
     Size++;
 }
Exemple #2
0
 public static DeleteResult Delete(RandomNode node, int data)
 {
     if (node == null)
     {
         return(new DeleteResult(null, false));
     }
     else if (node.Data == data)
     {
         if (node.Left == null && node.Right == null)
         {
             return(new DeleteResult(null, true));
         }
         else if (node.Left != null && node.Right != null)
         {
             var tempNode = node.Right;
             while (tempNode != null && tempNode.Left != null)
             {
                 tempNode = tempNode.Left;
             }
             node.Data = tempNode.Data;
             node.Size--;
             node.Right = Delete(node.Right, tempNode.Data).Node;
             return(new DeleteResult(node, true));
         }
         else if (node.Left != null)
         {
             return(new DeleteResult(node.Left, true));
         }
         else
         {
             return(new DeleteResult(node.Right, true));
         }
     }
     else if (data < node.Data)
     {
         var result = Delete(node.Left, data);
         node.Left = result.Node;
         if (result.Deleted)
         {
             node.Size--;
         }
         return(new DeleteResult(node, result.Deleted));
     }
     else
     {
         var result = Delete(node.Right, data);
         node.Right = result.Node;
         if (result.Deleted)
         {
             node.Size--;
         }
         return(new DeleteResult(node, result.Deleted));
     }
 }
Exemple #3
0
        public static RandomNode GetRandomNode(RandomNode node, int?randomNum)
        {
            if (randomNum == null)
            {
                var random = new Random();
                randomNum = random.Next(node.Size);
            }
            var leftSize  = node.Left != null ? node.Left.Size : 0;
            var rightSize = node.Right != null ? node.Right.Size : 0;

            if (randomNum == leftSize)
            {
                return(node);
            }
            else if (randomNum < leftSize)
            {
                return(GetRandomNode(node.Left, randomNum));
            }
            else
            {
                return(GetRandomNode(node.Right, randomNum - leftSize - 1));
            }
        }
Exemple #4
0
 public DeleteResult(RandomNode node, bool deleted)
 {
     Node    = node;
     Deleted = deleted;
 }