如何实现PHP中的非递归树遍历算法?

在PHP中,实现树的非递归遍历通常使用栈(Stack)或队列(Queue),这里我将展示如何使用栈来实现深度优先搜索(DFS)和广度优先搜索(BFS)来遍历树。

如何实现PHP中的非递归树遍历算法?插图1

深度优先搜索(DFS)

深度优先搜索是一种沿着树的深度遍历树的节点,尽可能深地搜索树的分支。

示例代码:

class TreeNode {
    public $value;
    public $children;
    public function __construct($value) {
        $this->value = $value;
        $this->children = [];
    }
    public function addChild(TreeNode $child) {
        $this->children[] = $child;
    }
}
function dfs($root) {
    $stack = [$root];
    while (!empty($stack)) {
        $node = array_pop($stack);
        echo $node->value . " ";
        foreach ($node->children as $child) {
            $stack[] = $child;
        }
    }
}
// 创建树结构
$root = new TreeNode('A');
$b = new TreeNode('B');
$c = new TreeNode('C');
$d = new TreeNode('D');
$e = new TreeNode('E');
$f = new TreeNode('F');
$root->addChild($b);
$root->addChild($c);
$b->addChild($d);
$b->addChild($e);
$c->addChild($f);
// 执行DFS
dfs($root); // 输出: A C F B E D

广度优先搜索(BFS)

广度优先搜索是按层次遍历树的节点,从根节点开始,然后是所有子节点,然后是子节点的子节点,依此类推。

如何实现PHP中的非递归树遍历算法?插图3

示例代码:

function bfs($root) {
    $queue = [$root];
    while (!empty($queue)) {
        $node = array_shift($queue);
        echo $node->value . " ";
        foreach ($node->children as $child) {
            $queue[] = $child;
        }
    }
}
// 执行BFS
bfs($root); // 输出: A B C D E F

深度优先搜索(DFS) 使用栈,先访问完一个分支再回溯。

广度优先搜索(BFS) 使用队列,按层级顺序访问节点。

如何实现PHP中的非递归树遍历算法?插图5

这两种方法都是非递归方式遍历树结构的有效手段。

以上就是关于“php非递归算法 _树递归”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/85946.html

小末小末
上一篇 2024年10月27日 20:26
下一篇 2024年10月27日 20:43