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++; }
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)); } }
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)); } }
public DeleteResult(RandomNode node, bool deleted) { Node = node; Deleted = deleted; }