二叉排序樹查詢演算法之php實現
二叉排序樹,又稱為二叉查詢樹。它或者是一棵空樹,或者是具有下列性質的二叉樹。
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";
自己的一些粗略實現,如有更好的想法,歡迎交流。