Untitled
unknown
plain_text
2 years ago
2.0 kB
7
Indexable
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);
}
}Editor is loading...