PHP Class&Object -- PHP 自排序二叉树的深入解析


Posted in PHP onJune 25, 2013

在节点之间再应用一些排序逻辑,二叉树就能提供出色的组织方式。对于每个节点,都让满足所有特定条件的元素都位于左节点及其子节点。在插入新元素时,我们需要从树的第一个节 点(根节点)开始,判断它属于哪一侧的节点,然后沿着这一侧找到恰当的位置,类似地,在读取数据时,只需要使用按序遍历方法来遍历二叉树。

<?php
ob_start();
// Here we need to include the binary tree class
Class Binary_Tree_Node() {
   // You can find the details at
}
ob_end_clean();
// Define a class to implement self sorting binary tree
class Sorting_Tree {
    // Define the variable to hold our tree:
    public $tree;
    // We need a method that will allow for inserts that automatically place
    // themselves in the proper order in the tree
    public function insert($val) {
        // Handle the first case:
        if (!(isset($this->tree))) {
            $this->tree = new Binary_Tree_Node($val);
        } else {
            // In all other cases:
            // Start a pointer that looks at the current tree top:
            $pointer = $this->tree;
            // Iteratively search the tree for the right place:
            for(;;) {
                // If this value is less than, or equal to the current data:
                if ($val <= $pointer->data) {
                    // We are looking to the left ... If the child exists:
                    if ($pointer->left) {
                        // Traverse deeper:
                        $pointer = $pointer->left;
                    } else {
                        // Found the new spot: insert the new element here:
                        $pointer->left = new Binary_Tree_Node($val);
                        break;
                    }
                } else {
                    // We are looking to the right ... If the child exists:
                    if ($pointer->right) {
                        // Traverse deeper:
                        $pointer = $pointer->right;
                    } else {
                        // Found the new spot: insert the new element here:
                        $pointer->right = new Binary_Tree_Node($val);
                        break;
                    }
                }
            }
        }
    }    // Now create a method to return the sorted values of this tree.
    // All it entails is using the in-order traversal, which will now
    // give us the proper sorted order.
    public function returnSorted() {
        return $this->tree->traverseInorder();
    }
}
// Declare a new sorting tree:
$sort_as_you_go = new Sorting_Tree();
// Let's randomly create 20 numbers, inserting them as we go:
for ($i = 0; $i < 20; $i++) {
    $sort_as_you_go->insert(rand(1,100));
}
// Now echo the tree out, using in-order traversal, and it will be sorted:
// Example: 1, 2, 11, 18, 22, 26, 32, 32, 34, 43, 46, 47, 47, 53, 60, 71,
//   75, 84, 86, 90
echo '<p>', implode(', ', $sort_as_you_go->returnSorted()), '</p>';
?>

PHP 相关文章推荐
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
PHP 强制下载文件代码
Oct 24 PHP
PHP 事件机制(2)
Mar 23 PHP
基于php split()函数的用法详解
Jun 05 PHP
163的邮件用phpmailer发送(实例详解)
Jun 24 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
学习PHP session的传递方式
Jun 15 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
Apr 23 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 #PHP
PHP多例模式介绍
Jun 24 #PHP
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 #PHP
PHP垃圾回收机制引用计数器概念分析
Jun 24 #PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 #PHP
PHP 读取大文件的X行到Y行内容的实现代码
Jun 24 #PHP
解析在PHP中使用全局变量的几种方法
Jun 24 #PHP
You might like
PHP设计模式 注册表模式
2012/02/05 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
jquery操作select大全
2014/04/25 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
Python探索之自定义实现线程池
2017/10/27 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
Python解析json代码实例解析
2019/11/25 Python
Python中有几个关键字
2020/06/04 Python
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
网络安全方面的面试题
2016/01/07 面试题
体育学院毕业生自荐信
2013/11/03 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
入股协议书范本
2014/04/14 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
财务会计求职信范文
2015/03/20 职场文书
故意伤害辩护词
2015/05/21 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
nginx 配置缓存
2022/05/11 Servers