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

2015-01-24信息快讯网

本篇文章是对PHP中的自排序二叉树进行了详细的分析介绍,需要的朋友参考下

在节点之间再应用一些排序逻辑,二叉树就能提供出色的组织方式。对于每个节点,都让满足所有特定条件的元素都位于左节点及其子节点。在插入新元素时,我们需要从树的第一个节 点(根节点)开始,判断它属于哪一侧的节点,然后沿着这一侧找到恰当的位置,类似地,在读取数据时,只需要使用按序遍历方法来遍历二叉树。
<?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中session变量的销毁
php中session退出登陆问题
php把session写入数据库示例
php检测iis环境是否支持htaccess的方法
php将session放入memcached的设置方法
php的hash算法介绍
php中hashtable实现示例分享
php中的路径问题与set_include_path使用介绍
php stripslashes和addslashes的区别
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
php使用base64加密解密图片示例分享
PHP反射类ReflectionClass和ReflectionObject的使用方法
PHP利用str_replace防注入的方法
php preg_replace替换实例讲解
简单实用的.net DataTable导出Execl
PHP中include与require使用方法区别详解
php class类的用法详细总结
PHP Class&Object -- 解析PHP实现二叉树
通过PHP current函数获取未知字符键名数组第一个元素的值
解析php中eclipse 用空格替换 tab键
解析php addslashes()与addclashes()函数的区别和比较
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
解析php框架codeigniter中如何使用框架的session
关于更改Zend Studio/Eclipse代码风格主题的介绍
关于查看MSSQL 数据库 用户每个表 占用的空间大小
解析php函数method_exists()与is_callable()的区别
深入理解PHP中的Session和Cookie
PHP 使用MySQL管理Session的回调函数详解
PHP 解决session死锁的方法
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
IIS+fastcgi下PHP运行超时问题的解决办法详解
用Json实现PHP与JavaScript间数据交换的方法详解
慎用preg_replace危险的/e修饰符(一句话后门常用)
php class中public,private,protected的区别以及实例分析
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
©2014-2024 dbsqp.com