2012-04-03 6 views
2

Ich versuche, einen Binärbaum als HTML-Tabelle zu erstellen, die nicht rekursiv ist. Die Reihenfolge der Felder so sein sollte:kein rekursiver dynamischer Binärbaum mit PHP

C1 C2 C3 

     7 
    3 
     8 
1 
     9 
    4 
     10 

     11 
    5 
     12 
2 
     13 
    6 
     14 

C1 steht für Spalte 1, C2 für col2 usw. Der folgende Code erstellt eine Tabelle in einer rekursiven Art und Weise, aber das ist nicht das, was ich will!

<?php 
$cols = 4; 
$counter = 0; 
$lines = pow(2,$cols); 

echo '<table border=1 style="border:1px solid black;"> '; 

    for($i = 0; $i < $lines; $i++){ 
     echo '<tr>'; 
      for($j = 0; $j < $cols; $j++){ 
       $rowspan = $lines/pow(2,$j+1); 
        if(0 === $i%$rowspan) { 
         $counter++; 
         echo '<td rowspan='.$rowspan.'>'.$counter; 
        } 
      } 
    } 

echo '</table>'; 
?> 

Ich hoffe jemand könnte mir einen Hinweis geben, wie man dieses Problem löst.

+0

Was ist die praktische Anwendung? I.e. Welches Problem versuchen Sie zu lösen? Oder sind das Hausaufgaben? – ghoti

+0

In Ihrem Beispiel gibt es keine Rekursion. – Basti

+0

Entschuldigung für meine unklare Beschreibung. Wenn Sie eine HTML-Tabelle erstellen, werden die Spalten und Zeilen wie mein PHP-Skript erstellt und dies ist wie eine rekursive Funktion. Aber ich brauche die Felder in der Reihenfolge, die in meinem Beispiel gezeigt wird. – Mannitou

Antwort

0

diesen Ausdruck verwendet, um die Reihe der Werte zu berechnen: ($i/$rowspan + pow(2,$j+1) - 1) wobei $i/$rowspan die Nummer der Zeile in der aktuellen Ebene mit 0 für die erste Reihe und pow(2,$j+1) - 1 ist das erste Wert Niveau, d.h. 7 für die dritte Ebene startet.

$cols = 4; 
$lines = pow(2,$cols); 

echo '<table border=1 style="border:1px solid black;">'; 

    for($i = 0; $i < $lines; $i++){ 
     echo '<tr>'; 
      for($j = 0; $j < $cols; $j++){ 
       $rowspan = $lines/pow(2,$j+1); 
        if(0 === $i%$rowspan) { 
         echo "<td rowspan='$rowspan'>". 
          ($i/$rowspan + pow(2,$j+1)-1). 
         "</td>"; 
        } 
      } 
    } 

echo '</table>'; 

Gibt Ihr gewünschtes Ergebnis aus. Hoffe, dein Lehrer wird mich jetzt nicht hassen! ;-)

Sie können alternativ ($i/$lines + 1) * pow(2,$j+1) - 1 für den Wert der Zeile verwenden, wenn Sie nicht auf $ rowspan angewiesen sind.

+0

Großartig! Die Lösung funktioniert perfekt für mich! – Mannitou