Beispiel #1
0
        public object visit(NonEmptyNode nonEmptyNode)
        {
            if (x < nonEmptyNode.getKey())
            {
                nonEmptyNode.setLeft((Node)nonEmptyNode.getLeft().accept(this));
            }
            else if (x > nonEmptyNode.getKey())
            {
                nonEmptyNode.setRight((Node)nonEmptyNode.getRight().accept(this));
            }
            else
            {
                if (nonEmptyNode.getLeft().isEmpty())
                {
                    return(nonEmptyNode.getRight());
                }
                else if (nonEmptyNode.getRight().isEmpty())
                {
                    return(nonEmptyNode.getLeft());
                }

                Node temp = nonEmptyNode;
                nonEmptyNode = (NonEmptyNode)temp.getRight().accept(new NodeMinimumSearchingVisitor());
                nonEmptyNode.setRight((Node)temp.getRight().accept(new NodeMinimumDeletionVisitor()));
                nonEmptyNode.setLeft(temp.getLeft());
            }
            return(nonEmptyNode);
        }
        public object visit(EmptyNode emptyNode)
        {
            NonEmptyNode newNode = (NonEmptyNode)BSTBuilder.getNodeFactory().createNonEmptyNode(newKey);

            newNode.setLeft(EmptyNode.getInstance());
            newNode.setRight(EmptyNode.getInstance());
            return(newNode);
        }
        public object visit(NonEmptyNode nonEmptyNode)
        {
            if (newKey.Equals(nonEmptyNode.getKey()))
            {
                throw new KeyAlreadyExistException(newKey + " already exists");
            }
            if (newKey < nonEmptyNode.getKey())
            {
                nonEmptyNode.setLeft((NonEmptyNode)nonEmptyNode.getLeft().accept(this));
            }
            else
            {
                nonEmptyNode.setRight((NonEmptyNode)nonEmptyNode.getRight().accept(this));
            }

            return(nonEmptyNode);
        }