| 
#!/usr/bin/php
<?php
 
 /*
 *         testLLRBTree is copyright � 2009. EarthWalk Software.
 *         Licensed under the Academic Free License version 3.0
 *      Refer to the file named Copyright provided with the source.
 */
 /**
 *
 * testLLRBTree.
 *
 * Sample application to test the LLRBTree classes.
 * @author Jay Wheeler.
 * @version 1.0
 * @copyright � 2009. EarthWalk Software.
 * @license refer to Copyright file provided with the source.
 * @package LLRBTree.
 * @subpackage testLLRBTree.
 */
 require 'iComparable.php';
 
 require 'bTree.php';
 require 'bNode.php';
 
 require 'LLRBTree.php';
 require 'LLRBNode.php';
 
 $words = array('cat',      'animal',  'donkey',
 'bear',     'bat',     'dog',
 'elephant', 'gazelle', 'llama',
 'zebra',    'horse',   'ferret',
 'wombat');
 
 $orderedWords = array('animal',   'bat',    'bear',
 'cat',      'dog',    'donkey',
 'elephant', 'ferret', 'gazelle',
 'horse',    'llama',  'wombat',
 'zebra');
 
 $deleteWords =array('elephant', 'gazelle', 'animal',
 'horse',    'wombat',  'cat',
 'zebra',    'ferret',  'donkey',
 'bat',      'llama',   'dog',
 'bear');
 
 $tree = new LLRBTree();
 $wordnumber = 0;
 foreach($words as $word)
 {
 $tree->insert($word, ++$wordnumber);
 printLine(sprintf("inserted: %s, root = %s", $word, $tree->root()->key()));
 printTree($tree);
 }
 
 $minNode = $tree->treeTop();
 printLine("**************************");
 printLine(sprintf('minimum = %s', $minNode->key()));
 printLine("**************************");
 
 foreach($deleteWords as $word)
 {
 $tree->delete($word);
 printLine(sprintf("deleted: %s, root = %s", $word, (($tree->root() != null) ? $tree->root()->key() : 'null')));
 printTree($tree);
 }
 
 $wordnumber = 0;
 foreach($orderedWords as $word)
 {
 $tree->insert($word, ++$wordnumber);
 printLine(sprintf("inserted: %s, root = %s", $word, $tree->root()->key()));
 printTree($tree);
 }
 
 exit(0);
 
 function printTree($tree)
 {
 $nodenumber = 0;
 foreach($tree as $key => $data)
 {
 $node = $tree->currentNode();
 $nodenumber++;
 printLine(sprintf("\t% 2u - %s = %s, left = %s, right = %s, flag = %s",
 $nodenumber,
 $key,
 $data,
 (($node->left() === null) ? 'null' : $node->left()->key()),
 (($node->right() === null) ? 'null' : $node->right()->key()),
 ($node->flag() ? 'RED' : 'BLACK')));
 }
 
 printLine("**************************");
 }
 
 function printLine($buffer)
 {
 print $buffer . "\n";
 }
 
 |