• 技术文章 >头条

    php二叉查找树的使用

    小妮浅浅小妮浅浅2021-03-18 09:42:10原创3107

    本文操作系统:windows7系统、PHP5.6版本、DELL G3电脑。

    1.概念

    二叉查找树,也称二叉搜索树、有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树:

    1)所有子树上面的左节点的值都比根结点要小,右节点的值都比根结点要大

    2)任意结点的左右子树也都是二叉查找树

    3)通过中序遍历,将得到的是一个有序的数列

    2.特性

    若左子树不为空,则左子树上所有结点的值均小于它的根结点的值;

    若右子树不为空,则右子树上所有结点的值均大于或等于它的根结点的值;

    它的左、右子树也分别为二叉查找树。

    3.实例

    <?php
    class Node{
    private $num;//学生学号
    private $name;//学生姓名
    private $scoreChinese;//学生语文成绩
    private $scoreMath;//数学成绩
    private $scoreEnglish;//英语成绩
    private $left;
    private $right;
    public function __construct(){
    $this->left  = null;
    $this->right = null;
    }
    public function __set($key,$value){
    $this->$key = $value;
    }
    public function __get($key){
    if(isset($this->$key)){
    return $this->$key;
    }
    }
    }
    class Tree{
    private $top;//树顶节点
    public function __construct($array){
    //生成树
    $falses = $this->makeTree($array);
    $this->readTree();
    }
    public function makeTree($array){
    if(empty($array)){
    $this->top = null;
    return;
    }
    //选择树顶节点
    $temp = $array[floor(count($array)/2)];
    $this->top->num   = $temp['num'];
    $this->top->name   = $temp['name'];
    $this->top->scoreChinese = $temp['scoreChinese'];
    $this->top->scoreMath  = $temp['scoreMath'];
    $this->top->scoreEnglish = $temp['scoreEnglish'];
    $this->top->left   = null;
    $this->top->right   = null;
    unset($array[floor(count($array)/2)]);
    $false  = 0;//建树失败的节点
    foreach($array as $value){
    if(false == $this->insert($value)){
    $false++;
    }
    }
    }
    /**
    插入节点
    */
    public function insert($info){
    $aNode = new Node();
    $aNode->num      = $info['num'];
    $aNode->name   = $info['name'];
    $aNode->scoreChinese = $info['scoreChinese'];
    $aNode->scoreMath    = $info['scoreMath'];
    $aNode->scoreEnglish = $info['scoreEnglish'];
    $aNode->left   = null;
    $aNode->right   = null;
    if(null == $this->top){
    $this->top = $aNode;
    return;
    }
    $nowNode = $this->top;
    while(true){
    if($nowNode->num == $aNode->num){
    return false;
    }elseif($nowNode->num>$aNode->num && null == $nowNode->left){
    $nowNode->left = $aNode;
    return true;
    }elseif($nowNode->num<$aNode->num && null == $nowNode->right){
    $nowNode->right = $aNode;
    return true;
    }elseif($nowNode->num>$aNode->num && $nowNode->left != null){
    $nowNode = $nowNode->left;
    }elseif($nowNode->num<$aNode->num && $nowNode->right != null){
    $nowNode = $nowNode->right;
    }
    }
    }
    /**
    查询节点
    */
    public function search($num){
    $nowNode = $this->top;
    while(true){
    if($nowNode->num == $num){
    return $nowNode;
    }elseif($nowNode->num>$num && null == $nowNode->left){
    return null;
    }elseif($nowNode->num<$num && null == $nowNode->right){
    return null;
    }elseif($nowNode->num>$num && $nowNode->left!=null){
    $nowNode = $nowNode->left;
    }elseif($nowNode->num<$num && $nowNode->right!=null){
    $nowNode = $nowNode->right;
    }
    }
    }
    /**
    树是否为空
    */
    public function isEmpty(){
    if(is_null($this->top)){
    return true;
    }else{
    return false;
    }
    }
    /**
    中序便利树
    */
    public function readTree(){
    $result = array();
    $this->read($this->top,$result);
    return $result;
    }
    private function read($nowNode,&$result){
    if(null != $nowNode->left){
    $this->read($nowNode->left,$result);
    }
    array_push($result,$nowNode);
    if(null != $nowNode->right){
    $this->read($nowNode->right,$result);
    }
    }
    }
    ?>

    以上就是php二叉查找树的使用,相信大家对这种名称有些新奇的算法比较感兴趣。在学会了相关的用法后,赶快动手尝试下它的使用吧。更多php学习指路:php数组

    专题推荐:php二叉查找树
    上一篇:python中Bokeh怎么用? 下一篇:java中可变参数列表的实现方法

    相关文章推荐

    • php顺序查找的使用• php插值查找的用法• php中的哈希表是什么• 哈希表在php中的使用• php二叉查找树的使用

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网