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

yipeiwu_com6年前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修改时间格式的代码

修改时间格式: date("Y-m-d",strtotime($list['pubdate'])); 学习解释:将时间放入strtotime为时间戳后用date()转化格式.下面写了两个...

PHP API接口必备之输出json格式数据示例代码

前言 我们在日常的开发工作中免不了要写接口,json格式文本的输出是制作接口必须掌握的,现在通行的接口基本是采用json格式的数据。下面话不多说,来看看本文的详细内容: 简单的php&n...

浅谈PHP的exec()函数无返回值排查方法(必看)

在安全imagemagic时 需要用到 exec很多服务器上安装失败 exec()执行外部命令失败,但没有任何错误信息。 exec执行某命令在命令行下没有问题,但是在php中就出错。这个...

php生成百度sitemap站点地图类函数实例

本文实例讲述了php生成百度sitemap站点地图类函数的方法,分享给大家供大家参考。具体实现方法如下: 问题概述: 公司网站是问答百科的网站、seo工程师提出需求说根据网站的问题来生成...

php文件上传 你真的掌握了吗

php文件上传 你真的掌握了吗

这里首先声明一下这一章的内容比较多,比较难,你要抱着和自己死磕的态度。细微之处不放过,多敲多练是王道。 学习就像爬山,得一步一步来,首先给自己定一个小目标,然后再坚持不懈地往高出攀爬,...