gistfile1.txt
$array = [5,2,9,3,10,13,2,1,20,26,18,62];
$binaryTree = new BinaryTree();
foreach($array as $value){
$binaryTree->insert($value);
}
$binaryTree->inOrderTraverse(function($key){echo $key.'';});
class Node{
public $key = null;
public $left = null;
public $right = null;
public function __construct($key){
$this-> key = $key;
}
}
class BinaryTree{
public $root = null;
public function insert($key){
$newNode = new Node($key);
if($this->root === null){
$this->root = $newNode;
}else{
$this->insertNode($this->root,$newNode);
}
}
private function insertNode($node, $newNode){
if($node->key < $newNode->key){
if($node->left === null){
$node->left = $newNode;
}else{
$this->insertNode($node->left,$newNode);
}
}else{
if($node->right === null){
$node->right = $newNode;
}else{
$this->insertNode($node->right, $newNode);
}
}
}
//排序取出数据
public function inOrderTraverse($callback){
$this->inOrderTraverseNode($this->root,$callback);
}
private function inOrderTraverseNode($node,$callback){
if($node !== null){
$this->inOrderTraverseNode($node->left,$callback);
$callback($node->key);
$this->inOrderTraverseNode($node->right,$callback);
}
}
}