PHP Class&Object -- 解析PHP实现二叉树_php教程-查字典教程网
PHP Class&Object -- 解析PHP实现二叉树
PHP Class&Object -- 解析PHP实现二叉树
发布时间:2016-12-29 来源:查字典编辑
摘要:二叉树及其变体是数据结构家族里的重要组成部分。最为链表的一种变体,二叉树最适合处理需要一特定次序快速组织和检索的数据。复制代码代码如下:

二叉树及其变体是数据结构家族里的重要组成部分。最为链表的一种变体,二叉树最适合处理需要一特定次序快速组织和检索的数据。

复制代码 代码如下:

<?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教程学习
    编程开发子分类