2017-04-08 5 views
0

Ich muss ein Array verwenden, um eine binäre Suchstruktur mit einer bestimmten Formel zu implementieren: root ist Baum [0]. Für jeden Knoten in Baum [n] werden die Kinder von n (falls vorhanden) in Baum [2n + 1] (linker Zweig) und Baum [2n + 2] (rechter Zweig) gefunden. Ich darf ein zweites Array erstellen, um die BST zu speichern. Ich bin ein Pseudo-Code angegeben:Wie binäre Suchbaum mit einem unsortierten Array mit dieser spezifischen Formel zu implementieren?

for(i=1;i<;i++) { 
    //Every iteration we start from the root node 
    while (the cell is not empty){ 
     if(less than the element) 
     go to 2i+1; 
     else if (greater than the element) 
     go to 2i+2; 

Bisher das, was ich brainstormed:

public class BinarySearchTree { 

    public void createBST(int[] array) { 

     int[] tree = new int[array.length]; 

     int root = array[0]; 

     for (int i = 0; i < array.length; i++) { 
      if (array[i] < root) { 
       tree[(2*i)+1] = array[i]; 
      } else { 
       array[(2 * i) + 2]; 
      } 
     } 
    } 
} 

Ich weiß nicht, wohin man von hier zu gehen. Ich mache das schon eine Weile ohne Lösung. Jede Hilfe wird geschätzt. Vielen Dank.

Antwort

0

dass Pseudocode nie einen Baum erstellt.

Alle Array-Werte sind nur für den Vergleich relevant, die interessante Information ist der Index. Auch das "Gehe zu" ändert eine Position. Diese Position muss irgendwo gespeichert werden (und beginnt mit der Wurzel).

Integer[] tree = new Integer[array.length] 
//the element to add is array[i] 
for (int i = 0; i < array.length; ++i) { 
    //every iteration starts from the root node 
    int pos = 0; 
    //while the cell is not empty 
    while (tree[pos] != null) { 
     //if the cell is smaller than the element 
     if (tree[pos] < array[i]) { 
      //go to 2n+1 
      pos = 2 * pos + 1; 
     } else { 
      //go to 2n+2 
      pos = 2 * pos + 2; 
     } 
    } 
    //add at the empty position. 
    tree[pos] = array[i]; 
} 

Hinweis: Ich habe das nicht testen, es könnte ein ArrayIndexOutBoundException einen etwas Punkt werfen.

+0

Vielen Dank! Ich habe den Code ausgeführt und es gibt eine ArrayIndexOutOfBoundException. Ich habe versucht, array.length zu ändern und eine zusätzliche if-Anweisung für pos> array.length hinzuzufügen, aber kein Ergebnis. Ich denke, es könnte die while-Schleife sein. Hast du eine Idee, wie das zu beheben ist? – Jen

+0

Das zugrunde liegende Problem ist, dass durch das Folgen Ihres Pseudocodes das Hinzufügen der Sequenz "1; 2; 3; 4" in den Positionen "0; 2; 6; 14" gespeichert wird, aber das Array wäre nur 4 lang. Die dumme Lösung wäre, das Array gerade groß genug zu machen. Andere Lösungen: eine Art Balancing oder _sorting_ 'array', um ein binärer Suchbaum zu werden (nicht sehr effizient, aber garantiert funktionieren). Etwas, das ich vergessen habe zu fragen: Ist 'Array' sortiert? – Poohl

+0

Ich debuggte gerade mein Programm und sehe, was Sie sagen. Nein, das Array ist nicht sortiert. Mein Professor sagte, dass er nicht möchte, dass das Array sortiert wird. Tut mir leid, ich habe vergessen, etwas zu erwähnen: Wenn der Knoten kein linkes und/oder rechtes Kind hat, sollte die entsprechende Position -1 sein. Soll ich das Array nur vergrößern, weil ich erstere machen muss? – Jen

Verwandte Themen