### Non-recursive dynamic binary tree with PHP

2

I try to create a binary tree as html-table which is not recursive build. The order of the fields should be like this:

``````C1  C2  C3

7
3
8
1
9
4
10

11
5
12
2
13
6
14
``````

C1 stands for col 1, C2 for col2 etc. The following code creates a table in a recursive way, but this is not what I want!

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

I hope someone could give me a hint how to solve this problem.

2012-04-03 23:20
by Mannitou
What is the practical application? I.e. what problem are you trying to solve? Or is this homework - ghoti 2012-04-03 23:21
There is no recursion in your example - Basti 2012-04-03 23:30
Sorry for my unclear description. If you create a html-table, the cols and rows are build in the way like my php-script and this is like a recursive function. But I need the fields in the order shown in my example - Mannitou 2012-04-03 23:37

0

Used this expression to calculate the row's values: `(\$i / \$rowspan + pow(2,\$j+1) - 1)` wherein `\$i / \$rowspan` is the number of the row in the current level starting with `0` for the first row and `pow(2,\$j+1) - 1` is the level's first value, i.e. `7` for the third level.

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

Outputs your desired result. Hope your teacher won't hate me now! ;-)

You can alternativly use `(\$i/\$lines + 1 ) * pow(2,\$j+1) - 1` for the row's value, if you don't want to depend on \$rowspan.

2012-04-04 00:12
by Basti
Great! The solution works perfect for me - Mannitou 2012-04-04 06:49