Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Třetí domácí úkol

Instance třídy Node reprezentuje kořen binárního stromu obsahujícího celá čísla. Vaším úkolem je naprogramovat metody inorderIterator(), preorderIterator(), postorderIterator(), které vrátí iterátory vracející prvky daného stromu v pořadí inorder, preorder resp. postorder. Jedna instance iterátoru smí v paměti alokovat maximálně konstantní prostor, tzn. paměťové nároky iterátoru nesmí růst s počtem uzlů v daném stromu. Specificky: nesmíte iterátory implementovat tak, že “přesypete” všechny prvky do již existující kolekce a vrátíte její iterátor. Samozřejmě také nesmíte modifikovat iterovaný strom.

Pokud uzel od kterého získáte iterátor není kořenem celého stromu, prochází pouze podstrom jehož je kořenem

Průchod stromem typu preorder, inorder a postorder si nastudujte na http://datastructuresnotes.blogspot.cz/2009/02/binary-tree-traversal-preorder-inorder.html , případně http://cs.wikipedia.org/wiki/Strom_(datov%C3%A1_struktura)#Metody_proch.C3.A1zen.C3.AD_stromu

Rozhraní CustomIterator neodevzdávejte, hodnotící systém je již obsahuje.

Všechny vaše třídy se musí nacházet v package cz.cvut.k36.omo.hw.hw03.

Odevzdávaný kód (tzn. třídu Node a třídy iterátorů - každou v samostatném .java souboru) zabalte do .zip archivu a odevzdejte do systému Brute. Celý projekt také uložte do svého gitlab repozitáře.

public interface CustomIterator {
    public boolean hasNext();
    public int next();
}
 
public class Node {
    private final int contents;
    private final Node left, right;
    private Node parent;
 
    public Node(int contents, Node left, Node right) {
        this.contents = contents;
        this.left = left;
        if (left != null) left.parent = this;
        this.right = right;
        if (right != null) right.parent = this;
    }
 
    public CustomIterator preorderIterator() { ... }
    public CustomIterator inorderIterator() { ... }
    public CustomIterator postorderIterator() { ... }
}

courses/b6b36omo/hw/032018/start.txt · Last modified: 2018/11/02 18:29 by balikm1