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中的超全局变量
Oct 09 PHP
一个程序下载的管理程序(三)
Oct 09 PHP
mysq GBKl乱码
Nov 28 PHP
PHP下判断网址是否有效的代码
Oct 08 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
php字符串分割函数用法实例
Mar 17 PHP
php计算税后工资的方法
Jul 28 PHP
php基础教程
Aug 26 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
PHP实现清除MySQL死连接的方法
Jul 23 PHP
php mysql 封装类实例代码
Sep 18 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 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 PDO函数库详解
2010/04/27 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
浅析php中jsonp的跨域实例
2013/06/21 PHP
php中Snoopy类用法实例
2015/06/19 PHP
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
python空元组在all中返回结果详解
2020/12/15 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
高中数学教师求职信
2013/10/30 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
论文答谢词
2015/01/20 职场文书
护士个人年终总结
2015/02/13 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书