class Node {
public $data;
public $left;
public $right;
public function __construct($data){
$this->data=$data;
}
}
class CreateTree{
public $tree;
//二叉树进行插入
public function insert($data){
if(!$this->tree){
$this->tree = new Node($data);
return ;
}
$p = $this->tree;
while($p){
if($data < $p->data ){
if(!$p->left){
$p->left = new Node($data);
return ;
}
$p= $p->left;
}elseif($data > $p->data){
if(!$p->right){
$p->right = new Node($data);
return;
}
$p=$p->right;
}
}
}
//前序遍历
public function preOrder(){
$stack = array();
$root = $this->tree;
array_push($stack,$root);
while(!empty($stack)){
$p = array_pop($stack);
echo $p->data.PHP_EOL;
if($p->right != null){
array_push($stack,$p->right);
}
if($p->left != null){
array_push($stack,$p->left);
}
}
}
//中序遍历
public function inOrder(){
$stack = array();
$tree = $this->tree;
while(!empty($stack) || $tree != null){
while($tree != null){
array_push($stack,$tree);
$tree = $tree->left;
}
$tree = array_pop($stack);
echo $tree->data.PHP_EOL;
$tree=$tree->right;
}
}
//后序遍历
public function tailOrder(){
$stack = array();
$output = array();
$tree = $this->tree;
array_push($stack,$tree);
while(!empty($stack)){
$tree = array_pop($stack);
array_push($output,$tree);
if($tree->left != null){
array_push($stack,$tree->left);
}
if($tree->right != null){
array_push($stack,$tree->right);
}
}
while(!empty($output)){
$p = array_pop($output);
echo $p->data.PHP_EOL;
}
}
}
$objcreate = new CreateTree();
$arr = array(16,33,32,50,13,5,14);
foreach ($arr as $key => $value) {
$objcreate->insert($value);
}
//$objcreate->preOrder();#前序遍历
//$objcreate->inOrder();#中序遍历
//$objcreate->tailOrder();#结序遍历