二叉排序树,又称为二叉查找树。它或者是一棵空树,或者是具有下列性质的二叉树。
1.若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
2.若它的右子树不空,则右子树上所有结点的值均小于它的根结点的值
3.它的左、右子树也分别为二叉排序树
构造一棵二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除关键字的速度。
下面是二叉排序树查找操作的php实现:
首先构造数据结构:
class BinaryTree
{
public $data;
public $lChild;
public $rChild;
public function __construct($data, $lChild = null, $rChild = null)
{
$this->data = $data;
$this->lChild = $lChild;
$this->rChild = $rChild;
}
}
然后实现二叉排序树:
$b37 = new BinaryTree(37);
$b35 = new BinaryTree(35, null, $b37);
$b51 = new BinaryTree(51);
$b47 = new BinaryTree(47, $b35, $b51);
$b58 = new BinaryTree(58, $b47);
$b93 = new BinaryTree(93);
$b99 = new BinaryTree(99, $b93);
$b73 = new BinaryTree(73);
$b88 = new BinaryTree(88, $b73, $b99);
$binaryTree = new BinaryTree(62, $b58, $b88);
最后实现算法:
function searchBst($binaryTree, $key)
{
if (is_null($binaryTree)) {
return ‘sorry’;
} else {
global $tmp;
$tmp = $binaryTree;
}
if ($binaryTree->data == $key) {
return $binaryTree;
} else if ($key < $binaryTree->data) {
return searchBst($binaryTree->lChild, $key);
} else {
return searchBst($binaryTree->rChild, $key);
}
}
$res = searchBst($binaryTree, 93);
print_r($res);echo “\n”;
print_r($tmp);echo “\n”;
自己的一些粗略实现,如有更好的想法,欢迎交流。