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中使用Oracle数据库(1)
Oct 09 PHP
php抓即时股票信息
Oct 09 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
php header示例代码(推荐)
Sep 08 PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 PHP
php中的静态变量的基本用法
Mar 20 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 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
短波收音机简介
2021/03/01 无线电
php GD绘制24小时柱状图
2008/06/28 PHP
php调用c接口无错版介绍
2014/03/11 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
Python实现简单截取中文字符串的方法
2015/06/15 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
实习单位推荐信范文
2013/11/27 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
论文指导教师评语
2014/04/28 职场文书
支部组织生活会方案
2014/06/10 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
八年级作文之感恩
2019/11/22 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
详解MySQL的半同步
2021/04/22 MySQL
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP