Crearea unui BST dintr-o matrice

voturi
1

Am nevoie pentru a crea un arbore binar de căutare în modul următor (ciudat):

Am dat o matrice (A [n]). A [1] devine rădăcina copacului.

  • Apoi, am insera A [1] + A [2] la subarborele stânga (subtree1, utilizat de mai jos) din rădăcină și se introduce, de asemenea, A [1] -A [2] la subarborele drept (subtree2) din rădăcină.

  • Inserez A [1] + A [2] + A [3] la subarborele stâng al subtree1 (subtree3) și A [1] + A [2] -A [3] la subarborele drept al subtree1 (subtree4).

  • Apoi, am insera A [1] -A [2] + A [3] la subarborele stâng al subtree2 (subtree5) și A [1] -A [2] -A [3] la subarborele drept al subtree2 (subtree6 ).

  • Repet pentru subtree3, subtree4, subtree5, subtree6 până când ajung la sfârșitul șirului.

Deci, practic, primul element al matrice devine rădăcina copacului și apoi m-am muta in jos: Fiecare subramificație stanga are pentru valoarea suma mamă plus următorul element de matrice și fiecare subramificație dreapta a pentru valoarea diferenței de mamă și a următorului element din matrice.

Înțeleg că trebuie să folosesc conceptul de recursivitate, dar într-un mod modificat. Tastarea problema mea aici și încearcă să-l explice pe altcineva în afară de creierul meu a făcut de fapt, mi-l formează într-un mod care mi-a dat cateva idei pentru a încerca, dar eu pot vedea problema am de-a face cu a fi o problemă de obicei, asa ca poate ai putea da mi câteva indicii cu privire la modul de utilizare a recursivitate pentru a construi copac.

Privind în jurul valorii de la alte întrebări și discuții am înțeles există o politică împotriva cere soluții întregi, așa că am vrut să fie clar că eu nu cer soluție, dar pentru orientare pentru ea. Dacă cineva ar dori să aibă un aspect Vă pot arăta ceea ce am făcut deja.

Întrebat 24/03/2011 la 02:20
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Modul de a face recursivitate este să-și asume întotdeauna aveți deja o funcție de lucru în mână. Așa că hai să vedem [folosind sintaxa Java] ...

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

Să presupunem că funcționează. Atunci ar face u nevoie pentru a face pentru a construi un copac la indexul 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);

Asta e practic. Ai nevoie să aibă grijă de cazuri de margine: a indicelui = array.length, crearea primul nod, și altele asemenea

Publicat 24/03/2011 la 02:27
sursa de către utilizator

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