kiszámításához belső útvonal hossza BST csak előrendelésre vagy postorder bejárás

szavazat
3

Szia StackOverflow közösségéhez!

Próbálom kitalálni, hogyan kell kiszámítani a belső úthossza BST adni csak az előrendelési vagy postorder bejárás (ez nem sok a különbség) nélkül építi a fa; Ez, azt szeretnénk, hogy csak az egyik bejárási említettük. Ez lehet egy egyszerű választ a legtöbben, de talán már gondoltam én egészen új fákat.

Nos olyan gondolat, értékelik, és köszönöm.

A kérdést 23/02/2011 06:01
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
-1

Ha jól értem a problémát, hogy nem lehet. Tekintsük a két fa

   A         A
  / \        |
 B   C       B
             |
             C

Ezek azonos előrendelésre bejárás (ABC), de különböző belső útvonal hossza (2 és 3).

Válaszolt 23/02/2011 06:44
a forrás felhasználó

szavazat
0

Van egy oldalt http://geeksforgeeks.org/?p=6633 , hogy tárgyalja az épület egy fa az előjegyzés és rendű bejárási. Itt, mivel a fa egy keresési fát, akkor az in-order bejárás implicit (a sorrend a billentyűk). Használhatja a rekurzív algoritmus, mint az egyik, hogy a webhely, hogy kiszámolja a szintet az egyes csomópontja (anélkül, hogy építeni a fa), majd hozzáadjuk a szintek együtt, hogy a belső út hossza. Ez algoritmus lehet, hogy nem a leghatékonyabb, mivel ez nem keres a bejárás, hogy megtalálja a megfelelő gyermek az egyes csomópontok, de meg kell dolgozni. Ez a legjobb tippem, hogy hogyan kell csinálni egy egymenetes algoritmus (feltételezve, hogy minden gomb külön):

int internal_path_length(key_iter& cur_node, key_iter end, int level, key max_key) {
  if (cur_node == end) return 0;
  key cur_key = *cur_node;
  if (cur_key > max_key) return 0;
  ++cur_node;
  int len1 = internal_path_length(cur_node, end, level + 1, cur_key);
  int len2 = internal_path_length(cur_node, end, level + 1, max_key);
  return len1 + len2 + level;
}

Kezdeni valamivel:

key_iter i = preorder.begin();
internal_path_length(i, preorder.end(), 0, mk);

ahol mknagyobb a lehető legnagyobb kulcs a fán.

Válaszolt 23/02/2011 06:48
a forrás felhasználó

szavazat
0

Mivel ez egy BST már implicite van inorder bejárása a fa (rendezett lista elemek).

Mi is létrehozhatunk egy egyedi fa csak előrendelhető vagy postorder bejárás Pre lesz [R, elemek listája kevesebb R listája nagyobb elem, akkor R] üzenet lesz [lista elemeit kevesebb R, elemek listája nagyobb, R, R]

Pszeudokód fog kinézni.

findIPLPreOrder(poArray,startIndex,endIndex, height) {
     if(startIndex==endIndex){
          retrn height;
     }
     m=findIndexOfEndofLeftSubTree(poArray,start,end);
     return findIPLPreOrder(poArray,start+1,m,height + 1) + findIPLPreOrder(poArray,m+1,end,height + 1);     
}

findIndexOfEndofLeftSubTree(poArray,start,end){
  R=poArray[start]
  for(i=start+1;i<=end;i++){
     if(R < poArray[i]){
         return i-1;
       }
  }
}
Válaszolt 23/02/2011 06:52
a forrás felhasználó

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