Creazione di un BST da un array

voti
1

Ho bisogno di creare un albero binario di ricerca nel modo seguente (strano):

Mi viene data una matrice (A [n]). A [1] diventa la radice dell'albero.

  • Poi, inserisco A [1] + A [2] per il sottoalbero sinistro (subtree1, utilizzato sotto) della radice e inserisco anche A [1] -A [2] per sottoalbero destro (subtree2) della radice.

  • Inserisco A [1] + A [2] + A [3] per sottoalbero sinistro di subtree1 (subtree3) e A [1] + A [2] -A [3] a destra sottoalbero di subtree1 (subtree4).

  • Poi, inserisco A [1] -A [2] + A [3] per sottoalbero sinistro di subtree2 (subtree5) e A [1] -A [2] -A [3] a destra sottoalbero di subtree2 (subtree6 ).

  • Ripeto per subtree3, subtree4, subtree5, subtree6 fino a raggiungere la fine della matrice.

Quindi, in sostanza, il primo elemento della matrice diventa la radice dell'albero e poi spostarsi verso il basso: ogni sottoalbero sinistro ha per valore la somma del suo genitore più il prossimo elemento della matrice e di ogni sottoalbero destro ha per il valore della differenza di suo genitore e del successivo elemento nella matrice.

Capisco che ho bisogno di utilizzare il concetto di ricorsione, ma in un modo modificata. Digitando il mio problema qui e cercando di spiegare a qualcun altro a parte il mio cervello in realtà mi ha fatto formarlo in un modo che mi ha dato alcune idee per provare, ma posso vedere il problema ho a che fare con l'essere un problema al solito quindi forse si potrebbe dare mi alcune indicazioni su come utilizzare la ricorsione per costruire l'albero.

Guardandosi intorno in altri domande e le discussioni Capisco che ci sia una politica contro chiedendo soluzioni intere così ho voluto mettere in chiaro che non sto chiedendo per la soluzione, ma per la guida ad esso. Se qualcuno vorrebbe avere uno sguardo posso mostrarvi quello che ho già fatto.

È pubblicato 24/03/2011 alle 02:20
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Il modo per farlo ricorsione è di assumere sempre si dispone già di una funzione di lavoro in mano. Quindi cerchiamo di vedere [utilizzando la sintassi Java] ...

Tree buildTree(int currentSum, int[] array, int index, boolean sign);

Supponiamo che funziona. Poi avrebbe do u bisogno di fare per costruire un albero di indice i?

// current value to look at at this level
int curValue = array[index];
// depending on sign, it may be negative
if (!sign) { 
  curValue *= -1;
}
// add it to the running total
int nodeValue = currentSum + curValue;
Node nd = new Node(nodeValue);

nd.left = buildTree(nodeValue, array, index + 1, true);
nd.right = buildTree(nodeValue, array, index + 1, false);

Questo è fondamentalmente esso. Hai bisogno di prendersi cura dei casi limite: indice = array.length, creazione del primo nodo, e simili

Risposto il 24/03/2011 a 02:27
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more