biziclop在this post中插入了非递归深度优先搜索算法的伪代码。
如果我们要使用递归 DFS算法来检查节点是否适当,我们可以利用两种变体:预订(当节点为(在子节点之前检查)和后顺序(在节点之前检查子节点时),以及第三个变体(顺序:左子树,然后是节点,然后是右子树)仅适用于二叉树。
由于我对尽可能拥有所有三个变体感兴趣,因此我尝试修改biziclop的伪代码,以获得DFS算法的所有三个变体。问题是,我陷入了一个事实,即节点在其子节点之前被添加到了堆栈(并因此被检查)。有想法吗?
答案 0 :(得分:0)
为什么“(并因此检查)”? 在递归方法中,您选择先检查当前节点还是先查看它的子节点,以同样的方式,您只看到节点,但是何时检查它们呢? 例如,如果您看到它是孩子并检查了它们,以简单的方式只需使用flag来seen_its_children(不表示选中)即可处理post_order,而in_order则相同,在pre_order中,您只需按照您说的去做就足够了