二叉树增加中序后续,层级遍历
This commit is contained in:
parent
a8ab74397d
commit
733d00f5b4
@ -149,4 +149,58 @@ class Tree
|
||||
$this->preOrder($node->left);
|
||||
$this->preOrder($node->right);
|
||||
}
|
||||
|
||||
/**中序遍历
|
||||
* @param $node
|
||||
*
|
||||
*/
|
||||
public function inOrder($node){
|
||||
if(empty($node)){
|
||||
return;
|
||||
}
|
||||
$this->inOrder($node->left);
|
||||
echo $node->data . ' ';
|
||||
$this->inOrder($node->right);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $node
|
||||
* 后续遍历
|
||||
*/
|
||||
public function postOrder($node){
|
||||
if(empty($node)){
|
||||
return;
|
||||
}
|
||||
$this->postOrder($node->left);
|
||||
$this->postOrder($node->right);
|
||||
echo $node->data . ' ';
|
||||
|
||||
}
|
||||
/**
|
||||
* @param $queue
|
||||
* @param int $index 从队列(数组)的那个位置开始处理
|
||||
* 层级遍历
|
||||
* 首先把节点放入数组,记录放入数组的根节点个数index,把节点的左右子放入数组
|
||||
* 开始遍历数组queue(从index开始,子节点已经入队列的节点元素不再处理),把左右子节点放入queue,index++
|
||||
* 持续上述过程,当节点没有子节点时,入队列过程结束,queue里节点的顺序即为层级遍历元素节点的顺序
|
||||
*/
|
||||
public function levelOrder(&$queue,$index=0){
|
||||
$len=count($queue);
|
||||
for($i=$index;$i<$len;$i++){
|
||||
$node=$queue[$i];
|
||||
if($node->left){
|
||||
$queue[]=$node->left;
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
if($node->right){
|
||||
$queue[]=$node->right;
|
||||
}else{
|
||||
return ;
|
||||
}
|
||||
$index++;
|
||||
}
|
||||
$this->levelOrder($queue,$index);
|
||||
}
|
||||
}
|
34
php/24_tree/levelOrder.php
Normal file
34
php/24_tree/levelOrder.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: 764432054@qq.com
|
||||
* Date: 2019/9/22
|
||||
* Time: 23:30
|
||||
*
|
||||
*二叉树的层级遍历
|
||||
*/
|
||||
|
||||
|
||||
namespace Algo_24;
|
||||
|
||||
require_once '../vendor/autoload.php';
|
||||
|
||||
$tree=new Tree(20);
|
||||
$tree->insert(16);
|
||||
$tree->insert(30);
|
||||
$tree->insert(12);
|
||||
$tree->insert(19);
|
||||
|
||||
$tree->insert(10);
|
||||
$tree->insert(15);
|
||||
$tree->insert(18);
|
||||
$tree->insert(21);
|
||||
$tree->insert(38);
|
||||
|
||||
$q=[$tree->head];
|
||||
$tree->levelOrder($q);
|
||||
|
||||
foreach ($q as $n){
|
||||
echo $n->data." ";
|
||||
}
|
||||
echo PHP_EOL;
|
@ -9,6 +9,7 @@ $tree = new Tree();
|
||||
|
||||
$tree->insert(20);
|
||||
$tree->insert(30);
|
||||
$tree->insert(40);
|
||||
$tree->insert(10);
|
||||
$tree->insert(21);
|
||||
$tree->insert(22);
|
||||
@ -16,7 +17,14 @@ $tree->insert(22);
|
||||
$tree->preOrder($tree->head);
|
||||
echo PHP_EOL;
|
||||
|
||||
var_dump($tree->find(30));
|
||||
$tree->inOrder($tree->head);
|
||||
echo PHP_EOL;
|
||||
|
||||
$tree->postOrder($tree->head);
|
||||
echo PHP_EOL;
|
||||
|
||||
|
||||
print_r($tree->find(30));
|
||||
echo PHP_EOL;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user