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中使用sockets:从新闻组中获取文章
Oct 09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
如何隐藏你的.php文件
Jan 04 PHP
PHP 命名空间实例说明
Jan 27 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
Jul 22 PHP
php支付宝接口用法分析
Jan 04 PHP
PHP中实现crontab代码分享
Mar 26 PHP
PHP闭包定义与使用简单示例
Apr 13 PHP
PHP封装cURL工具类与应用示例
Jul 01 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
ThinkPHP的Widget扩展实例
2014/06/19 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
网上抓的一个特效
2007/05/11 Javascript
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
jquery 常用操作方法
2010/01/28 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
python使用socket连接远程服务器的方法
2015/04/29 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
详解如何设置Python环境变量?
2019/05/13 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
C语言基础笔试题
2013/04/27 面试题
医学实习生自我鉴定
2013/12/12 职场文书
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
公司部门司机岗位职责
2014/01/03 职场文书
学校大课间活动方案
2014/01/30 职场文书
社区健康教育实施方案
2014/03/18 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
项目经理任命书
2014/06/04 职场文书
啦啦队口号大全
2014/06/16 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书