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 相关文章推荐
拼音码表的生成
Oct 09 PHP
留言板翻页的实现详解
Oct 09 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
谷歌音乐搜索栏的提示功能php修正代码
May 09 PHP
PHP 第一节 php简介
Apr 28 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
PHP中绘制图像的一些函数总结
Nov 19 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
Aug 12 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 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中的串行化变量和序列化对象
2006/09/05 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
Javascript 面向对象特性
2009/12/28 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Windows下python3.6.4安装教程
2018/07/31 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
python实现马丁策略的实例详解
2021/01/15 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
介绍一下常见的木马种类
2014/11/15 面试题
毕业自我评价范文
2013/11/17 职场文书
欢迎标语大全
2014/06/21 职场文书
幼儿园见习报告
2014/10/30 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书