Harjutus: Kahendpuu
Kirjuta lõpuni järgnevad klassid
Oma lahenduse kontrollimiseks kasuta repos olevaid teste.
Node
package week1.soojendus; /** * Klass on mõeldud kahendpuu tipu esitamiseks. Tüübiparameeter T määrab, millist * tüüpi väärtust saab tipus hoida. Väärtuse küsimiseks on meetod getValue. */ public class Node<T> { public Node(T value, Node<T> leftChild, Node<T> rightChild) { // TODO: täienda konstruktorit // Mida võiks siin teha? Kas midagi on äkki kuskil puudu? } public T getValue() { // TODO: kirjuta erindi viskamise asemele enda kood throw new UnsupportedOperationException(); } /** * Tagastab vasaku alampuu. Selle puudumisel tagastab null-i. */ public Node<T> getLeftChild() { // TODO: kirjuta erindi viskamise asemele enda kood throw new UnsupportedOperationException(); } public Node<T> getRightChild() { // TODO: kirjuta erindi viskamise asemele enda kood throw new UnsupportedOperationException(); }; /** * Tagastab true tippude korral, millel pole ühtegi alampuud. */ public boolean isLeaf() { // TODO: kirjuta erindi viskamise asemele enda kood throw new UnsupportedOperationException(); } /** * Meetod peab tagastama true või false vastavalt sellele, kas antud (alam)puus * leidub näidatud väärtus. Võrdlemine toimub meetodi equals alusel. */ public boolean contains(T value) { // TODO: kirjuta erindi viskamise asemele enda kood throw new UnsupportedOperationException(); } /** * toString peab tagastama puu suluesituse. * * Formaat: * Puu iga tipp on esitatud ümarsulgudes antud kolmikuna, kus esimene * element on tipu väärtus, teine element on vasak alluv ning kolmas on parem alluv. * Kui alluv puudub, siis on sõnes vastaval kohal allkriips. * * Komponentide vahel peab olema koma ja üks tühik. * * Näited: * kui t on ühetipuline puu tüübiga Node<Integer>, * mille tipu väärtus on 3, siis t.toString() peab tagastama * "(3, _, _)" * * * Kui t on selline puu: * 1 * / \ * / \ * 2 -44 * \ * 3 * * siis t.toString() peab tagastama * * "(1, (2, _, (3, _, _)), (-44, _, _))" */ @Override public String toString() { // TODO: kirjuta super.toString asemele enda kood return super.toString(); } }
NodeUtils
package week1.soojendus; public class NodeUtils { /** * Meetod peab tagastama täisarvu, mis näitab mitu korda esineb antud (alam)puus * näidatud väärtus. NB! Võrdlemiseks kasutada meetodit equals! */ public static <T> int count(Node<T> tree, T value) { // TODO: kirjuta erindi viskamise asemele enda kood throw new UnsupportedOperationException(); } /** * NB! See on raskem ülesanne. Enne selle üritamist lahenda ja esita teised ülesanded ära! * * * See meetod peab võtma suluesituses sõnena antud puu ja tagastama vastava * puu andmestruktuuri. Tippudes oleva väärtuse tüüp on Integer. * * Sõne formaat on sama, nagu kirjeldatud Node.toString juures. * * Näited * * Kui käivitada * * puu = parseIntegerTree("(1, (2, _, (3, _, _)), (3, _, _))"); * * siis puu.getLeft().getRight().getValue() peab tagastama 3 * ja puu.getRight().isLeaf() peab tagastama true * ja NodeUtils.count(puu, 3) peab tagastama 2 * */ public static Node<Integer> parseIntegerTree(String s) { // TODO: kirjuta erindi viskamise asemele enda kood throw new UnsupportedOperationException(); } }