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 var_export与var_dump 输出的不同

    php var_export与var_dump 输出的不同

    var_export必须返回合法的php代码,也就是说,var_export返回的代码,可以直接当作php代码赋值个一个变量。 而这个变量就会取得和被var_export一样的类型的值
    2013-08-08
  • php简单获取目录列表的方法

    php简单获取目录列表的方法

    这篇文章主要介绍了php简单获取目录列表的方法,涉及php操作目录的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • php数组保存文本与文本反编成数组实例

    php数组保存文本与文本反编成数组实例

    这篇文章主要介绍了php数组保存文本与文本反编成数组的方法,通过两个自定义函数string2array与array2string实例展示了php数组保存文本与文本反编成数组的实现方法,具有不错的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • 利用PHP实现开心消消乐的算法示例

    利用PHP实现开心消消乐的算法示例

    开心消消乐应该对大家来说都不陌生吧,下面这篇文章主要给大家介绍了关于如何利用PHP实现开心消消乐算法的相关资料,文中将需求和示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • php采用session实现防止页面重复刷新

    php采用session实现防止页面重复刷新

    这篇文章主要介绍了php采用session实现防止页面重复刷新的代码及使用方法,需要的朋友可以参考下
    2015-12-12
  • 利用PHP内置SERVER开启web服务(本地开发使用)

    利用PHP内置SERVER开启web服务(本地开发使用)

    PHP 5.4.0起, CLI SAPI 提供了一个内置的Web服务器,这个内置的Web服务器主要用于本地开发使用,不可用于线上产品环境,URI请求会被发送到PHP所在的的工作目录Working Directory进行处理,除非你使用了-t参数来自定义不同的目录
    2020-01-01
  • PHP使用自定义key实现对数据加密解密的方法

    PHP使用自定义key实现对数据加密解密的方法

    这篇文章主要介绍了PHP使用自定义key实现对数据加密解密的方法,涉及php针对字符串的转换、截取等操作实现加密解密功能的相关技巧,需要的朋友可以参考下
    2017-12-12
  • php设计模式 Builder(建造者模式)

    php设计模式 Builder(建造者模式)

    将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示
    2011-06-06
  • PHP中SESSION的注销与清除

    PHP中SESSION的注销与清除

    本文给大家分享的是PHP中SESSION的注销与清除的方法和示例,非常的实用,有需要的小伙伴可以参考下。
    2015-04-04

最新评论