PHP Class&Object -- 解析PHP实现二叉树


Posted in PHP onJune 25, 2013

二叉树及其变体是数据结构家族里的重要组成部分。最为链表的一种变体,二叉树最适合处理需要一特定次序快速组织和检索的数据。

<?php
// Define a class to implement a binary tree
class Binary_Tree_Node {
    // Define the variable to hold our data:
    public $data;
    // And a variable to hold the left and right objects:
    public $left;
    public $right;    // A constructor method that allows for data to be passed in
    public function __construct($d = NULL) {
        $this->data = $d;
    }
    // Traverse the tree, left to right, in pre-order, returning an array
    // Preorder means that each node's value preceeds its children.
    public function traversePreorder() {
        // Prep some variables.
        $l = array();
        $r = array();
        // Read in the left and right children appropriately traversed:
        if ($this->left) { $l = $this->left->traversePreorder(); }
        if ($this->right) { $r = $this->right->traversePreorder(); }
        // Return a merged array of the current value, left, and right:
        return array_merge(array($this->data), $l, $r); 
    }
    // Traverse the tree, left to right, in postorder, returning an array
    // Postorder means that each node's value follows its children.
    public function traversePostorder() {
        // Prep some variables.
        $l = array();
        $r = array();
        // Read in the left and right children appropriately traversed:
        if ($this->left) { $l = $this->left->traversePostorder(); }
        if ($this->right) { $r = $this->right->traversePostorder(); }
        // Return a merged array of the current value, left, and right:
        return array_merge($l, $r, array($this->data)); 
    }
    // Traverse the tree, left to right, in-order, returning an array.
    // In-order means that values are ordered as left children, then the
    //  node value, then the right children.
    public function traverseInorder() {
        // Prep some variables.
        $l = array();
        $r = array();
        // Read in the left and right children appropriately traversed:
        if ($this->left) { $l = $this->left->traverseInorder(); }
        if ($this->right) { $r = $this->right->traverseInorder(); }
        // Return a merged array of the current value, left, and right:
        return array_merge($l, array($this->data), $r); 
    }
}
// Let's create a binary tree that will equal the following:    3
//                                                             / /      
//                                                            h   9      
//                                                               / /     
// Create the tree:                                             6   a    
$tree = new Binary_Tree_Node(3);
$tree->left = new Binary_Tree_Node('h');
$tree->right = new Binary_Tree_Node(9);
$tree->right->left = new Binary_Tree_Node(6);
$tree->right->right = new Binary_Tree_Node('a');
// Now traverse this tree in all possible orders and display the results:
// Pre-order: 3, h, 9, 6, a
echo '<p>', implode(', ', $tree->traversePreorder()), '</p>';
// Post-order: h, 9, 6, a, 3
echo '<p>', implode(', ', $tree->traversePostorder()), '</p>';
// In-order: h, 3, 6, 9, a
echo '<p>', implode(', ', $tree->traverseInorder()), '</p>';
?>

PHP 相关文章推荐
php批量删除数据
Jan 18 PHP
PHP 输出简单动态WAP页面
Jun 09 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
Aug 01 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
Jun 09 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 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
You might like
php修改时间格式的代码
2011/05/29 PHP
php自定义session示例分享
2014/04/22 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
浅谈javascript 归并方法
2015/01/21 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
python实现数组插入新元素的方法
2015/05/22 Python
详解python中requirements.txt的一切
2017/03/03 Python
python妙用之编码的转换详解
2017/04/21 Python
人机交互程序 python实现人机对话
2017/11/14 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
TensorFlow如何实现反向传播
2018/02/06 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
python单例模式的多种实现方法
2019/07/26 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
python爬虫要用到的库总结
2020/07/28 Python
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
音乐器材管理制度
2014/01/31 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
安全责任书模板
2014/07/22 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
培训讲师开场白
2015/06/01 职场文书
工作收入证明模板
2015/06/12 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
2022微信温控新功能上线
2022/05/09 数码科技