예제 #1
0
 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");
         }
     }
 }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }