Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Iteratorius:
- private class IteratorKTU implements Iterator<E> {
- private Stack<BstNode<E>> stack = new Stack<>();
- // Nurodo iteravimo kolekcija kryptį, true - didėjimo tvarka, false - mažėjimo
- private boolean ascending;
- // Nurodo einamojo medžio elemento tėvą. Reikalingas šalinimui.
- private BstNode<E> parent = root;
- IteratorKTU(boolean ascendingOrder) {
- this.ascending = ascendingOrder;
- this.toStack(root);
- }
- @Override
- public boolean hasNext() {
- return !stack.empty();
- }
- @Override
- public E next() {
- if (!stack.empty()) {
- // Grąžinamas paskutinis į steką patalpintas elementas
- BstNode<E> n = stack.pop();
- // Atsimenama tėvo viršunė. Reikia remove() metodui
- parent = (!stack.empty()) ? stack.peek() : root;
- BstNode node = (ascending) ? n.right : n.left;
- // Dešiniajame n pomedyje ieškoma minimalaus elemento,
- // o visi paieškos kelyje esantys elementai talpinami į steką
- toStack(node);
- return n.element;
- } else { // Jei stekas tuščias
- return null;
- }
- }
- @Override
- public void remove(){
- if(!stack.empty())
- {
- // pašalinamas elementas
- stack.pop();
- //pakeiciama rodyklė
- parent = (!stack.empty()) ? stack.peek() : root;
- }
- else
- {
- parent = null;
- }
- }
- private void toStack(BstNode<E> n) {
- while (n != null) {
- stack.push(n);
- n = (ascending) ? n.left : n.right;
- }
- }
- }
- /// RetainAll metodas
- public boolean retainAll(BstSetKTU<?> c)
- {
- boolean T = false;
- Iterator<E> it = this.iterator();
- Object[] Array = c.toArray();
- while(T != true)
- {
- for (int i = 0; i < Array.length; i++) {
- if(!it.equals(Array[i]))
- {
- remove(it.next());
- }
- }
- if(!it.hasNext())
- {
- T = true;
- }
- }
- return T;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement