2012-04-03 11 views
2

再帰的ビルドではないhtml-tableとしてバイナリツリーを作成しようとしています。フィールドの順序は次のようにする必要があります:なしPHPを使った再帰的な動的バイナリツリー

C1 C2 C3 

     7 
    3 
     8 
1 
     9 
    4 
     10 

     11 
    5 
     12 
2 
     13 
    6 
     14 

C1は、COL 1の略で、COL2などのためのC2 次のコードでは、再帰的な方法でテーブルを作成しますが、これは私が欲しいものではありません!

<?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>'; 
?> 

誰かがこの問題の解決方法を教えてくれることを願っています。行の値を計算するために、この式を使用し

+0

実際のアプリケーションとは何ですか?私。どのような問題を解決しようとしていますか?それともこの宿題ですか? – ghoti

+0

あなたの例で再帰はありません。 – Basti

+0

私の不明な記述には申し訳ありません。 htmlテーブルを作成すると、colとrowはphpスクリプトのようにビルドされます。これは再帰関数のようなものです。しかし私は私の例で示された順序でフィールドを必要とします。 – Mannitou

答えて

0

($i/$rowspan + pow(2,$j+1) - 1)$i/$rowspanは、1行目の0pow(2,$j+1) - 1始まる現在のレベルの行の数であり、前記第3のレベルに対するレベルの最初の値、すなわち7あります。

$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>'; 

結果を出力します。あなたの先生が今私を憎んではいけないと願っています! ;-)

$ rowspanに依存したくない場合は、代わりに($i/$lines + 1) * pow(2,$j+1) - 1を行の値として使用できます。

+0

素晴らしい!このソリューションは私にとって完璧に機能します! – Mannitou

関連する問題