首页 > 编程语言 >PHP 广度有限搜索和深度优先 DFS/BFS

PHP 广度有限搜索和深度优先 DFS/BFS

时间:2022-10-31 17:48:26浏览次数:31  
标签:Node queue top DFS BFS value child new PHP

广度有优先可以实现二叉树的层级遍历
  • 优先将 根节点 加入队列
  • 取出来一个节点进行处理
  • 依次词节点的 子节点入队 没有就不放入
  • 队列非空则 继续 重复取出一个节点加入子节点 知道结束
点击查看代码
class Node
{
    public $value;
    public $child_left;
    public $child_right;
}

$a = new Node();
$b = new Node();
$c = new Node();
$d = new Node();
$e = new Node();
$f = new Node();
$g = new Node();
$h = new Node();
$i = new Node();

$a->value = '1';

$b->value = '2';
$c->value = '3';

$d->value = '4';
$e->value = '5';

$f->value = '6';
$g->value = '7';


$a->child_left = $b;
$a->child_right = $c;

//   2
// 4  5

$b->child_left = $d;
$b->child_right = $e;


//   3
//  6   7

$c->child_left = $f;
$c->child_right = $g;

function bfs($root)
{
    $queue = [ $root];
    while (count($queue)) {

        for ($i = 0; $i < count($queue); $i++) {

            $top = array_shift($queue);
            echo $top->value, PHP_EOL;

            if ($top->child_left) {
                array_push($queue, $top->child_left);
            }

            if ($top->child_right) {
                array_push($queue, $top->child_right);
            }
        }
    }
}

深度优先使用栈 和广度优先一样

  • 放入跟节点
  • 拿出节点
  • 放入子节点
  • 栈非空 弹出节点 加入子节点
点击查看代码
function dfs($root)
{
    $queue = [$root];
    while (count($queue)) {
        for ($i = 0; $i < count($queue); $i++) {

            $top = array_pop($queue);
            echo $top->value, PHP_EOL;

            if ($top->child_left) {
                array_push($queue, $top->child_left);
            }

            if ($top->child_right) {
                array_push($queue, $top->child_right);
            }
        }
    }
}

标签:Node,queue,top,DFS,BFS,value,child,new,PHP
From: https://www.cnblogs.com/guanchaoguo/p/16845135.html

相关文章

  • PHP 动态规划算法
    动态规划实现背包问题题目假设6个物品最大容量10重量分别是【4,2,6,5,3】价值分别【6,3,5,4,6】算法利用贪心思路准备准备10个桶【0,0,0,0,0,0,0,0,0......
  • php 数据遍历查询
    //查询出所有需要待更新的数据,分页处理$query=OrderExportJob::query();$page=1;$limit=1000;$count=$data=$query->f......
  • php反序列化绕过__wakeup(O改为C)
    先说下适用条件:PHP版本:7.0.15-7.0.33,7.1.1-7.1.33,7.2.0-7.2.34,7.3.0-7.3.28,7.4.0-7.4.16,8.0.0-8.0.3。变量的初始化不在__construct里,而是在外面......
  • hadoop hdfs
    hadoophdfshdfs特性首先,它是一个文件系统用于存储文件的提供统一命名空间的目录树结构便于用户操作文件系统其次,它是一个分布式文件系统分布式意味着多台机器当中......
  • HDFS的其他功能
    不同集群之间的数据复制在我们实际工作当中,极有可能会遇到将测试集群的数据拷贝到生产环境集群,或者将生产环境集群的数据拷贝到测试集群,那么就需要我们在多个集群之间进行数......
  • PHP反序列化字符逃逸学习
    文章目录​​过滤后字符变多​​​​过滤后字符变少​​过滤后字符变多首先给出本地的php代码,很简单不做过多的解释,就是把反序列化后的一个x替换成为两个<?phpfunctionchan......
  • PHP session 阻塞问题
    由于PHP实现session的机制默认是利用把信息储存在文件里的,这就是涉及到读取文件需要保证一定安全性所以需要在读写的时候锁文件,如果不及时解锁,如程序的业务过程较长就......
  • nginx容器与php-fpm容器连接方式
    文档说明:只记录关键地方;获得nginx和php基础镜像的内默认配置文件从容器镜像中拷贝文件到容器外#!/bin/bashset-eux__DIR__=$(cd"$(dirname"$0")"pwd)c......
  • 构建PHP容器
    文档说明:只记录关键地方;构建脚本php-cli-alpine#!/bin/shset-uxTIME=`date-u'+%Y%m%dT%H%M%SZ'`VERSION="7.4-cli-alpine-"${TIME}IMAGE="wenba100xie/php:${......
  • hdfs
    1.hdfs报大量gc超时namenode日志出现大量GC超时相关错误,且30914端口未监听:GCpool'ParNew'hadcollection(s):count=1time=0msGCpool'ConcurrentMarkSweep'had......