Untitled
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); } }