private void addElement(Node <T> root, T element) { if (this.root == null) { this.root = new Node <T>(element, null, null, null); numberOfNodes++; } else { if (comp.Compare(element, root.getElement()) < 0)//x es menor que y { if (root.getLeft() == null) { root.setLeft(new Node <T>(element, root, null, null)); numberOfNodes++; } else { addElement(root.getLeft(), element); } } else if (comp.Compare(element, root.getElement()) > 0)//x es mayor que y { if (root.getRight() == null) { root.setRight(new Node <T>(element, root, null, null)); numberOfNodes++; } else { addElement(root.getRight(), element); } } else//x es igual que y { throw new Exception("NO SE PERMITEN DUPLICADOS"); } } }
public Node <int> insertRecursive(Node <int> root, Node <int> parent, int key) { if (root == null) { return(new Node <int>(parent, key)); } if (key < root.getData()) { root.setLeft(insertRecursive(root.getLeft(), root, key)); } else if (key > root.getData()) { root.setRight(insertRecursive(root.getRight(), root, key)); } return(root); }
public Node <int> deleteRecursive(Node <int> root, int key) { if (root == null) { return(root); } //if key less than root key, traverse left subtree if (key < root.getData()) { root.setLeft(deleteRecursive(root.getLeft(), key)); } //if key greater than root key, traverse right subtree else if (key > root.getData()) { root.setRight(deleteRecursive(root.getRight(), key)); } //found node to delete else { //node to delete has zero or one child node if (root.getLeft() == null) { if (root.getRight() != null) { root.getRight().setParent(root.getParent()); } return(root.getRight()); } else if (root.getRight() == null) { if (root.getLeft() != null) { root.getLeft().setParent(root.getParent()); } return(root.getLeft()); } //node to delete has two children, so find the smallest node on the right subtree //replace the node to delete with that node, then delete the smallest node on the right subtree root.setData(getMinValue(root.getRight())); root.setRight(deleteRecursive(root.getRight(), root.getData())); } return(root); }