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 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
php 图像函数大举例(非原创)
Jun 20 PHP
PHP合并数组+与array_merge的区别分析
Aug 01 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
php删除数组指定元素实现代码
May 03 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 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
Session保存到数据库的php类分享
2011/10/24 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
python实现简易版计算器
2020/06/22 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
Python subprocess模块常见用法分析
2018/06/12 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
python ftplib模块使用代码实例
2019/12/31 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
网络安全方面的面试题
2016/01/07 面试题
远东集团网络工程师面试题
2014/10/20 面试题
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
煤矿安全保证书
2015/02/27 职场文书
Win10系统下配置Java环境变量
2021/06/13 Java/Android
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS