/*
create a binary tree with some input given.
see what level I'm in.
level x, see if I have so many elements in the input
pop 2^(x-1) elements from queue. keep adding left and rights to those.
1
2 3
4 5 6 7
8 9
*/
class node
{
public $left;
public $right;
public $value;
}
$input = array(1,2,3,4,5,6,7,8,9);
$queue = array();
$i = 0;
$level = 2;
$max = count($input);
$current = new node();
$current->value = $input[$i++];
$current->left = null;
$current->right = null;
array_unshift($queue, $current);
echo $current->value." ";
while ( $i < $max )
{
$j = pow(2,$level-1);
// create nodes until 2^(level-1) and
while( $j > 0 && $i < $max )
{
$parent = array_pop($queue);
// create a left node
$newLeft = new node();
$newLeft->value = $input[$i++];
$newLeft->left = null;
$newLeft->right = null;
$parent->left = $newLeft;
array_unshift($queue, $newLeft);
$j--;
if($i >= $max || $j <= 0)
{
break;
}
// create right node
$newRight = new node();
$newRight->value = $input[$i++];
$newRight->left = null;
$newRight->right = null;
$parent->right = $newRight;
array_unshift($queue, $newRight);
$j--;
echo print_r($parent,1);
}
$level++;
echo "level :".$level;
//echo print_r($queue,1);
}
// Traverse the tree in BFT
// take the top, push all children. print current node.
// go to next level if all done with current level
// same logic almost.
$BFTQueue = array();
array_unshift($BFTQueue, $current);
echo "visit: ".$current->value;
while( count($BFTQueue) > 0 )
{
// next level.
$BFTCurrent = array_pop($BFTQueue);
// print the value and push
echo "visit: ".$BFTCurrent->value;
if($BFTCurrent->left)
{
array_unshift($BFTQueue, $BFTCurrent->left);
}
if($BFTCurrent->right)
{
array_unshift($BFTQueue, $BFTCurrent->right);
}
}
No comments:
Post a Comment