public bool Remove(T val) { BinaryTree <T> tree = Search(val); if (tree == null) { return(false); } BinaryTree <T> CurrentTree; if (tree == this) { if (tree.right != null) { CurrentTree = tree.right; } else { CurrentTree = tree.left; } while (CurrentTree.left != null) { CurrentTree = CurrentTree.left; } T temp = CurrentTree.val; this.Remove(temp); tree.val = temp; return(true); } if (tree.left == null && tree.right == null && tree.parent != null) { if (tree == tree.parent.left) { tree.parent.left = null; } else { tree.parent.right = null; } return(true); } if (tree.left != null && tree.right == null) { tree.left.parent = tree.parent; if (tree == tree.parent.left) { tree.parent.left = tree.left; } else if (tree == tree.parent.right) { tree.parent.right = tree.left; } return(!false); } if (tree.left == null && tree.right != null) { tree.right.parent = tree.parent; if (tree == tree.parent.left) { tree.parent.left = tree.right; } else if (tree == tree.parent.right) { tree.parent.right = tree.right; } return(true); } if (tree.right != null && tree.left != null) { CurrentTree = tree.right; while (CurrentTree.left != null) { CurrentTree = CurrentTree.left; } if (CurrentTree.parent == tree) { CurrentTree.left = tree.left; tree.left.parent = CurrentTree; CurrentTree.parent = tree.parent; if (tree == tree.parent.left) { tree.parent.left = CurrentTree; } else if (tree == tree.parent.right) { tree.parent.right = CurrentTree; } return(true); } else { if (CurrentTree.right != null) { CurrentTree.right.parent = CurrentTree.parent; } CurrentTree.parent.left = CurrentTree.right; CurrentTree.right = tree.right; CurrentTree.left = tree.left; tree.left.parent = CurrentTree; tree.right.parent = CurrentTree; CurrentTree.parent = tree.parent; if (tree == tree.parent.left) { tree.parent.left = CurrentTree; } else { tree.parent.right = CurrentTree; } return(true); } } return(false); }
public BinaryTree(T val, BinaryTree <T> parent) { this.val = val; this.parent = parent; }