/ / Problém ukazovateľa s binárnym vyhľadávacím stromom pri pokuse o tlač - java, binárny-vyhľadávací strom, uzly, docela-tlač

Problém s ukazovateľom s binárnym vyhľadávacím stromom pri pokuse o tlač - java, binárny-vyhľadávací strom, uzly, docela-tlač

Napíšem spôsob vytlačenia binárneho vyhľadávacieho stromu v poradí. Prišiel som na to spôsob, ako to urobiť, ale vyžaduje buď vypustenie alebo zrušenie uzlov, keď sú vytlačené. Nižšie je môj kód:

public String printKeysInOrder() {
String output = "";
if (isEmpty()) return "()";
else{
int i = 0;
while(i!=size()){
Node x = root;
int loopBreak = 0;
while(loopBreak!=1){
if(x.left != null) x = x.left;
else if (x.right != null){
output = output + " " + x.val;
x.key = null;
x = x.right;
i++;
}
else{
output = output + " " + x.val;
x.key = null;
loopBreak = 1;
}
}
i++;
}
}
return output;
}

pre strom:

            _7_
/     
_3_      8
/     
1       6
     /
2   4

5

mal by tlačiť "1 2 3 4 5 6 7 8"

kód funguje spôsobom, ktorý uprednostňuje pohybvľavo cez strom, kým to už nemôže ísť vľavo, potom uloží hodnotu uzla v reťazci výstupu, robí uzol kľúč rovný null (ako budúce iterácie slučky nechodia dole, že strom) a pohybuje sa doprava ak je to možné, alebo sa opakuje okolo slučky.

Aj keď mám problémy s tým, že sa tak stane uzlomsa rovná nulovému, ako pri vykonávaní kódu (prostredníctvom junitového testu) kód nerozpozná ten nulový kľúč a prechádza cez tento podstrom? Môže mi niekto pomôcť, alebo mi povedať, ako to urobiť, takže ukazovatele x.left a x.right na budúcich iterácií rozpoznať uzol ako nulový?

odpovede:

1 pre odpoveď č. 1

Nemusíte zrušiť alebo odstrániť uzly, ktoré potrebujete traverzový algoritmus.

Plánovaná traverza, ktorá je tu uvedená, by mala fungovať bez väčších zmien: http://www.javabeat.net/binary-search-tree-traversal-java/

Ďalší objektovo orientovaný prístup k tomuto je aNávštevník dodávaný do traverzovateľnej objednávky, ktorá vám umožňuje dodať akciu vykonanú v každom uzle, či už ide o tlač, zber, mapovanie alebo niečo iné.