Пример #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);
        }
Пример #2
0
        public object visit(EmptyNode emptyNode)
        {
            NonEmptyNode newNode = (NonEmptyNode)BSTBuilder.getNodeFactory().createNonEmptyNode(newKey);

            newNode.setLeft(EmptyNode.getInstance());
            newNode.setRight(EmptyNode.getInstance());
            return(newNode);
        }
Пример #3
0
        public object visit(NonEmptyNode nonEmptyNode)
        {
            if (nonEmptyNode.getLeft().isEmpty())
            {
                return(nonEmptyNode);
            }

            return(nonEmptyNode.getLeft().accept(this));
        }
Пример #4
0
        public object visit(NonEmptyNode nonEmptyNode)
        {
            int count = 0;

            if (condition.apply(nonEmptyNode))
            {
                count = 1;
            }
            return(count + (int)nonEmptyNode.getLeft().accept(this) + (int)nonEmptyNode.getRight().accept(this));
        }
Пример #5
0
        public object visit(NonEmptyNode nonEmptyNode)
        {
            int numberOfLeaves = (int)nonEmptyNode.getLeft().accept(this) + (int)nonEmptyNode.getRight().accept(this);

            if (numberOfLeaves == 0)
            {
                return(1);
            }
            return(numberOfLeaves);
        }
        public object visit(NonEmptyNode nonEmptyNode)
        {
            if (currentLevel < levelBeingCountedAt)
            {
                this.currentLevel++;
                int left  = (int)nonEmptyNode.getLeft().accept(this);
                int right = (int)nonEmptyNode.getRight().accept(this);
                currentLevel--;

                return(left + right);
            }
            return(1);
        }
        public object visit(NonEmptyNode nonEmptyNode)
        {
            if (nonEmptyNode.getKey() == x)
            {
                return(currentLengthPath);
            }

            currentLengthPath++;
            int resultFromLeft  = (int)nonEmptyNode.getLeft().accept(this);
            int resultFromRight = (int)nonEmptyNode.getRight().accept(this);

            currentLengthPath--;

            return(resultFromLeft != -1 ? resultFromLeft : resultFromRight);
        }
Пример #8
0
 public object visit(NonEmptyNode nonEmptyNode)
 {
     if (x == nonEmptyNode.getKey())
     {
         return(nonEmptyNode);
     }
     if (x < nonEmptyNode.getKey())
     {
         return(nonEmptyNode.getLeft().accept(this));
     }
     else
     {
         return(nonEmptyNode.getRight().accept(this));
     }
 }
Пример #9
0
        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);
        }
Пример #10
0
 public object visit(NonEmptyNode nonEmptyNode)
 {
     //tìm chiều cao của cây con trái và cây con phải,
     //cây con nào có chiều cao lớn hơn thì lấy giá trị đó cộng thêm 1(1 là chiều cao của nút gốc)
     return(1 + Math.Max((int)nonEmptyNode.getLeft().accept(this), (int)nonEmptyNode.getRight().accept(this)));
 }