static void TestRemove(BST <int> bst) { bst.Remove(5); bst.Remove(8); bst.Remove(20); Console.WriteLine("Removing: \t" + bst.ToString()); }
static void Main(string[] args) { BST Bst = new BST(); //SetBST(Bst); //Write("PreOrder: "); PreOrder(Bst.Root); //Write("\nInOrder: "); InOrder(Bst.Root); //Write("\nPostOrder: "); PostOrder(Bst.Root); Bst.Add(45); Bst.Add(35); Bst.Add(12); Bst.Add(5); Bst.Add(56); Bst.Add(37); Bst.Add(60); Bst.Search(70); Bst.Search(37); Bst.Remove(45); Bst.Remove(30); Bst.Remove(5); Bst.Remove(70); Bst.Remove(35); }
public void Remove(int value, BST parent) { if (value < this.value) { // look left if (left != null) { left.Remove(value, this); } } else if (value > this.value) { // look right if (right != null) { right.Remove(value, this); } } else { // remove case if (left != null && right != null) { // full subtree this.value = right.getMinValue(); right.Remove(this.value, this); } else if (parent == null) { // partial subtree case if (left != null) { this.value = left.value; right = left.right; left = left.left; } else if (right != null) { this.value = right.value; left = right.left; right = right.right; } else { // single node tree here } } else if (parent.left == this) { parent.left = left != null ? left : right; } else if (parent.right == this) { parent.right = left != null ? left : right; } } }
static void Main(string[] args) { BST tree = new BST(); tree.Add(20); tree.Add(15); tree.Add(17); tree.Add(30); tree.Add(34); tree.Add(32); tree.Add(10); tree.Add(12); CheckTree(tree); Console.WriteLine("***-*-*-*-*-*-*-***"); tree.Print(); tree.Remove(tree.GetNode(15)); CheckTree(tree); Console.WriteLine("***-*-*-*-*-*-*-***"); tree.Print(); Console.ReadLine(); }