是否有任何算法可以在级别优先顺序中递归遍历树,并且在后序中非递归地遍历。谢谢。
答案 0 :(得分:1)
您可以使用堆栈而不是递归中使用的隐式调用堆栈,以迭代方式递归递归树。
答案 1 :(得分:1)
要获得有效的递归广度优先搜索,您可以使用iterative deepening depth-first search。这对于分支因子很高的情况尤其有用,常规的广度优先搜索往往会因过多的内存消耗而窒息。
修改 Marcos Marin already mentioned it,但为了完整起见,the Wikipedia page on breadth-first traversal描述了算法:
- 将根节点排队。
- 将节点出列并进行检查。
- 如果在此节点中找到所寻找的元素,请退出搜索并返回结果。
- 否则将任何尚未发现的后继者(直接子节点)排队。
- 如果队列为空,则检查图表上的每个节点 - 退出搜索并返回“未找到”。
- 从第2步开始重复。
醇>注意:使用堆栈而不是队列会将此算法转变为深度优先搜索。
如果你想进行非递归深度优先遍历,那么最后一行显然对你很有意思。获取预订或订购后只需修改步骤2.b中添加节点的方式。
答案 2 :(得分:0)
<强>穿越强>
与线性数据结构相比 像链表和一维 数组,只有一个逻辑 遍历方式,树结构 可以遍历许多不同的 方法。从二进制文件的根开始 树,有三个主要步骤 可以执行和订单 它们的执行定义了 遍历类型。
这些步骤(没有 特别的顺序)是:表演 对当前节点的操作(参考 作为“访问”节点),遍历 到左子节点,并遍历 到正确的子节点。就这样 过程最容易描述 通过递归。
遍历非空二进制树 预订,执行以下操作 在每个节点递归操作, 从根节点开始:
- 访问节点。
- 遍历左子树。
- 遍历正确的子树。 (这也称为 Depth-first traversal. )
醇>遍历非空二进制树 按顺序执行以下操作 在每个节点递归操作:
- 遍历左子树。
- 访问节点。
- 遍历正确的子树。 (这也称为对称遍历。)
醇>遍历非空二进制树 后序,执行以下操作 在每个节点递归操作:
- 遍历左子树。
- 遍历正确的子树。
- 访问节点。
醇>最后,树也可以遍历 在级别订单,我们访问每一个 在转到a之前的某个级别上的节点 低等级。这也叫做 的 Breadth-first traversal 强>