php教程 二叉树,PHP Class&Object -- PHP 自排序二叉树的深入解析

在节点之间再应用一些排序逻辑,二叉树就能提供出色的组织方式。对于每个节点,都让满足所有特定条件的元素都位于左节点及其子节点。在插入新元素时,我们需要从树的第一个节 点(根节点)开始,判断它属于哪一侧的节点,然后沿着这一侧找到恰当的位置,类似地,在读取数据时,只需要使用按序遍历方法来遍历二叉树。

复制代码 代码如下:

ob_start();

// Here we need to include the binary tree class

Class Binary_Tree_Node() {

// You can find the details at

}

ob_end_clean();

// Define a class to implement self sorting binary tree

class Sorting_Tree {

// Define the variable to hold our tree:

public $tree;

// We need a method that will allow for inserts that automatically place

// themselves in the proper order in the tree

public function insert($val) {

// Handle the first case:

if (!(isset($this->tree))) {

$this->tree = new Binary_Tree_Node($val);

} else {

// In all other cases:

// Start a pointer that looks at the current tree top:

$pointer = $this->tree;

// Iteratively search the tree for the right place:

for(;;) {

// If this value is less than, or equal to the current data:

if ($val <= $pointer->data) {

// We are looking to the left ... If the child exists:

if ($pointer->left) {

// Traverse deeper:

$pointer = $pointer->left;

} else {

// Found the new spot: insert the new element here:

$pointer->left = new Binary_Tree_Node($val);

break;

}

} else {

// We are looking to the right ... If the child exists:

if ($pointer->right) {

// Traverse deeper:

$pointer = $pointer->right;

} else {

// Found the new spot: insert the new element here:

$pointer->right = new Binary_Tree_Node($val);

break;

}

}

}

}

}

// Now create a method to return the sorted values of this tree.

// All it entails is using the in-order traversal, which will now

// give us the proper sorted order.

public function returnSorted() {

return $this->tree->traverseInorder();

}

}

// Declare a new sorting tree:

$sort_as_you_go = new Sorting_Tree();

// Let's randomly create 20 numbers, inserting them as we go:

for ($i = 0; $i < 20; $i++) {

$sort_as_you_go->insert(rand(1,100));

}

// Now echo the tree out, using in-order traversal, and it will be sorted:

// Example: 1, 2, 11, 18, 22, 26, 32, 32, 34, 43, 46, 47, 47, 53, 60, 71,

//   75, 84, 86, 90

echo '

', implode(', ', $sort_as_you_go->returnSorted()), '

';

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值