php之二叉树,PHP Class&Object -- 解析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 '

', implode(', ', $tree->traversePreorder()), '

';

// Post-order: h, 9, 6, a, 3

echo '

', implode(', ', $tree->traversePostorder()), '

';

// In-order: h, 3, 6, 9, a

echo '

', implode(', ', $tree->traverseInorder()), '

';

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值