用php实现基本二叉树和排序二叉树

基于面向对象的PHP实现了二叉树和BST,实现了一些基本功能,主要用于练习编写PHP程序的熟练度和复习PHP面向对象。其中用到了__construct(),__get()和,__set()。

class btreenode{
private $data = NULL;
private $left = NULL;
private $right = NULL;
function __construct($key=NULL,$left=NULL,$right=NULL){
$this->data = $key;
$this->left=  $left;
$this->right=  $right;
}
function __get($name){ //利用get和set函数实现私有变量的读写
return $this->$name; //注意name前要加$
}
function __set($name,$value){
$this->$name = $value;
}
function inorder(){
echo $this->data;
if($this->left!=NULL)
$this->left->inorder();
if($this->right!=NULL)
$this->right->inorder();
}
function preorder(){
if($this->left!=NULL)
$this->left->preorder();
echo $this->data;
if($this->right!=NULL)
$this->right->preorder();
}
function reorder(){
if($this->left!=NULL)
$this->left->reorder();
if($this->right!=NULL)
$this->right->reorder();
echo $this->data;
}
};


class btree{
private $root = NULL;
function __get($name){
return $this->$name;
}
function __set($name,$value){
$this->$name = $value;
}
}


class bsearchtree extends btree{
function __construct($arr){ //传入一个数组,构造BST
foreach($arr as $value){
if($this->root == NULL){ //构造根节点
$this->root = new btreenode($value);
}
else{
$p = $this->root;
while($p!=NULL){
if($value<$p->__get('data')){ //注意,这里是在读写对象的私有变量,必须get和set函数,不能直接读写值
if($p->__get('left')==NULL){
$p->__set('left',new btreenode($value));
break;
}
else
$p = $p->__get('left');
}
if($value>$p->__get('data')){
if($p->__get('right') == NULL){
$p->__set('right',new btreenode($value));
break;
}
else
$p = $p->__get('right');
}
}
}
}
}
function find($data){
$result = -1;
if(isset($data)){
$p = $this->root;
while($p!=NULL){
if($data == $p->__get('data')){
$result = 1;
break;
}
if($data>$p->__get('data'))
$p = $p->__get('right');
else
$p = $p->__get('left');
}
}
return $result;
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值