Untitled

mail@pastecode.io avatar
unknown
plain_text
24 days ago
2.0 kB
2
Indexable
Never
public Set<E> setOfInsideNodes() {
        Set<E> boundaryNodes = boundaryTraversal();
        BstSet<E> innerNodes = new BstSet<>();
        IteratorBst iterator = new IteratorBst(true);
        while (iterator.hasNext()) {
            E element = iterator.next();
            if (!boundaryNodes.contains(element))
                innerNodes.add(element);
        }
        return innerNodes;
    }

    private Set<E> boundaryTraversal() {
        BstSet<E> boundaryNodes = new BstSet<>();
        boundaryNodes.add(root.element);
        traverseLeftBoundary(root.left, boundaryNodes);
        traverseLeaves(root.left, boundaryNodes);
        traverseLeaves(root.right, boundaryNodes);
        traverseRightBoundary(root.right, boundaryNodes);
        return boundaryNodes;
    }

    private void traverseRightBoundary(BstNode<E> node, BstSet<E> boundaryNodes) {
        if (node == null)
            return;
        if (node.right != null || node.left != null) {
            boundaryNodes.add(node.element);
        }

        if (node.right != null) {
            traverseRightBoundary(node.right, boundaryNodes);
        } else {
            traverseRightBoundary(node.left, boundaryNodes);
        }
    }

    private void traverseLeaves(BstNode<E> node, BstSet<E> boundaryNodes) {
        if (node == null)
            return;

        if (node.left == null && node.right == null) {
            boundaryNodes.add(node.element);
        }

        traverseLeaves(node.left, boundaryNodes);
        traverseLeaves(node.right, boundaryNodes);
    }

    private void traverseLeftBoundary(BstNode<E> node, BstSet<E> boundaryNodes) {
        if (node == null)
            return;
        if (node.left != null || node.right != null) {
            boundaryNodes.add(node.element);
        }

        if (node.left != null) {
            traverseLeftBoundary(node.left, boundaryNodes);
        } else {
            traverseLeftBoundary(node.right, boundaryNodes);
        }
    }