Ciao a tutti, ho un problema strano con una semplice ricorsione.
Premetto che non sono un asso della programmazione, comunque devo scrivere un metodo che: dato un albero implementato con una struttura a nodi, si faccia una visita in order, si shifti a sinistra di 1 la stringa contenente la sequenza di visita, ed infine si modifichi l' albero in modo che applicando di nuovo la visita in order si ottengo la sequenza con shift.
Esempio, se la sequenza in order letta è: ABCDE, la shifto ed ottengo: BCDEA.
Ora, per la visita in order ho pensato di scrivere semplicemente una sequenza ricorsiva del tipo:
public String inorderVisit() {
StringBuffer in = new StringBuffer("Visita in-order:");
if (root != null)
formatInorder(root, in);
return in.toString();
}
private void formatInorder(BTNode n, StringBuffer sb) {
if (n.left != null) {
formatInorder(n.left, sb); // visita albero sinistro
}
sb.append(" "+n.key); // aggiungo valore del nodo
if (n.right != null) {
formatInorder(n.right, sb); // visita albero destro
}
}
E fin qui tutto apposto, apparte il fatto che devo usare stringBuffer visot che semplicemte string non funziona, e non ne conosco il motivo.
Poi per eeguire lo shift ho preso la stringa prodotto dala visita, ho diviso i vari valori scritti e li ho salvato in un array. A questo punto ho semplicemente riscritto il metodo precedente, con la sola modifica che: al posto della concatenazione, si ha l' inserimento nel nodo del valore di una cella del' array.
public void newInorderVisit(Object[] obj){
int i = 0;
if (root != null)
shiftTree(root, obj, i);
}
private void shiftTree(BTNode n, Object [] value, int i) {
if(n.left != null){
shiftTree(n.left, value, i);
}
n.key = value[i];
i++;
if(n.right != null){
shiftTree(n.right, value, i);
}
}
E questo è quanto, ma non funziona assolutmante.
Inizialmente avevo le sequenza; 7965123, e poi avrei dovuto avere 9651237, invece ottengo 9969696.
Cosa c'è che non va ?![]()
Grazie a tutti in anticipo..![]()

Rispondi quotando