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 和 COM
Oct 09 PHP
PHP文本操作类
Nov 25 PHP
escape unescape的php下的实现方法
Apr 27 PHP
PHP 文章中的远程图片采集到本地的代码
Jul 30 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
YII Framework框架教程之国际化实现方法
Mar 14 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
Oct 25 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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的autoload自动加载机制使用说明
2010/12/28 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
python脚本设置超时机制系统时间的方法
2016/02/21 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
Django中ORM的基本使用教程
2020/12/22 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
html5时钟实现代码
2010/10/22 HTML / CSS
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
《称象》教学反思
2014/04/25 职场文书
大学生安全责任书
2014/07/25 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
公务员政审材料
2014/12/23 职场文书
交通安全温馨提示语
2015/07/14 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python