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

 更新时间:2013年06月25日 09:05:59   作者:  
本篇文章是对PHP中二叉树的实现代码进行详细的分析介绍,需要的朋友参考下
二叉树及其变体是数据结构家族里的重要组成部分。最为链表的一种变体,二叉树最适合处理需要一特定次序快速组织和检索的数据。
复制代码 代码如下:

<?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简洁函数小结

    对开源社区感兴趣,对php感兴趣,有一点时间了解下php
    2011-08-08
  • php魔法函数与魔法常量使用介绍

    php魔法函数与魔法常量使用介绍

    这篇文章主要介绍了php魔法函数与魔法常量的相关知识介绍,需要的朋友可以参考下
    2017-07-07
  • PHP实现文件下载限速功能的方法详解

    PHP实现文件下载限速功能的方法详解

    这篇文章主要为大家详细介绍了PHP中实现文件下载限速功能的实现原理与方法,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2024-02-02
  • PHP composer更新指定依赖包过程详细讲解

    PHP composer更新指定依赖包过程详细讲解

    这篇文章主要介绍了php使用composer安装扩展包教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • php自动载入类用法实例分析

    php自动载入类用法实例分析

    这篇文章主要介绍了php自动载入类用法,结合实例形式分析了php自动载入类的原理、用法与相关注意事项,需要的朋友可以参考下
    2016-06-06
  • PHP实现接收二进制流转换成图片的方法

    PHP实现接收二进制流转换成图片的方法

    这篇文章主要介绍了PHP实现接收二进制流转换成图片的方法,结合实例形式分析了php文件、目录及图形操作的相关技巧,需要的朋友可以参考下
    2017-01-01
  • PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法

    PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法

    这篇文章主要介绍了PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法,实例分析了php实用curl模拟登陆163邮箱的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • php获取网卡的MAC地址支持WIN/LINUX系统

    php获取网卡的MAC地址支持WIN/LINUX系统

    这篇文章主要介绍了使用php获取网卡的MAC地址支持WIN/LINUX系统,需要的朋友可以参考下
    2014-04-04
  • ThinkPHP 模板引擎使用详解

    ThinkPHP 模板引擎使用详解

    thinkphp系统支持原生的PHP模板,而且本身内置了一个基于XML的高效的编译型模板引擎,系统默认使用的模板引擎是内置模板引擎,关于这个模板引擎的标签详细使用可以参考模版引擎部分。
    2017-05-05
  • 浅析php静态方法与非静态方法的用法区别

    浅析php静态方法与非静态方法的用法区别

    下面小编就为大家带来一篇浅析php静态方法与非静态方法的用法区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05

最新评论