class btree{
public $head;
public function __construct(){
$this->head = null;
}
public function get($key, $node = null){
if (!$this->head) return false;
$node = $node ? $node : $this->head;
while ($node){
//找到直接返回
if ($node->key == $key){
return $node;
}
//查找的值小于父节点,查找左儿子节点
if ($key < $node->key){
$node = $node->left;
}
//查找的值大于父节点,查找右儿子节点
if ($key > $node->key){
$node = $node->right;
}
}
return false;
}
public function get2($key, $node = null){
if (!$this->head) return false;
$node = $node ? $node : $this->head;
//找到直接返回
if ($node->key == $key){
return $node;
}
//查找的值小于父节点,查找左儿子节点
if ($key < $node->key){
return $node->left ? $this->get($key, $node->left) : false;
}
//查找的值大于父节点,查找右儿子节点
if ($key > $node->key){
return $node->right ? $this->get($key, $node->right) : false;
}
}
public function insert($new_node){
if (!$this->head){
$this->head = &$new_node;
return true;
}
$current_node = $this->head;
while ($current_node){
$parent_node = $current_node;
if ($new_node->key > $current_node->key){
$current_node = $current_node->right;
}elseif ($new_node->key < $current_node->key){
$current_node = $current_node->left;
}else{
return false;
}
}
if ($new_node->key > $parent_node->key){
$parent_node->right = &$new_node;
}else{
$parent_node->left = &$new_node;
}
return true;
}
public function insert2($new_node, &$current_node = null){
if (!$this->head){
$this->head = &$new_node;
return true;
}
$current_node = $current_node ?? $this->head;
if (!$current_node){
$current_node = &$new_node;
return true;
}
if ($new_node->key > $current_node->key){
$this->insert($new_node, $current_node->right);
}elseif ($new_node->key < $current_node->key){
$this->insert($new_node, $current_node->left);
}
return false;
}
}
class Node{
public $key;
public $data;
public $left;
public $right;
public function __construct($key, $data){
$this->key = $key;
$this->data = $data;
}
}
$b = new btree();
$b->insert(new Node(1, 1));
$b->insert(new Node(2, 2));;
$b->insert(new Node(3, 3));
$b->insert(new Node(4, 4));
$b->insert(new Node(5, 5));
$re = $b->get(4)->data;
var_dump($re);
输出4