【问题标题】:Breadth first or depth first search for finding a child at a particular depth?广度优先还是深度优先在特定深度寻找孩子?
【发布时间】:2017-08-30 16:17:45
【问题描述】:

我知道这里有很多关于广度优先搜索与深度优先搜索的问题,但我认为我的情况有点不同。

我有一个有根树,其中每个节点可能有 0、1 或 2 个子节点(预期数字为 1)。给定大量n,我想找到一条通过长度为n 的树的路径。

似乎很清楚,深度优先应该是做到这一点的最佳方式,但我不太确定。树的宽度非常小,这通常是使用广度优先搜索的原因。此外,如果我使用深度优先搜索,那么我最终可能会向下进入一个高度非常接近n,但小于n 的子树。在那种情况下,我将浪费大量时间遍历一棵不可能给我想要的答案的树

【问题讨论】:

  • 我建议你看一下迭代加深深度优先搜索。
  • @marvel308 我有,我已经提到了我在问题中发现的内容。
  • @RudraniAngira 这不比深度优先搜索差吗?为了在深度n 找到一个节点,我必须搜索整个树直到深度n-1。深度优先搜索肯定会比这更好。
  • @JohnGowers IDDFS 将停止在您的目标状态的深度。

标签: algorithm graph binary-search-tree


【解决方案1】:
  1. 对于您的目标,DFS 总是比 BFS 更有效。由于 BFS 遍历深度为 1 的 所有 个节点,然后遍历深度为 2 的所有节点,以此类推,为了找到长度为 n 的路径,BFS 将首先遍历树中的所有路径长度

  2. 我知道这并不总是可能的,但是你们可以更改树的实现,以便每个节点都包含它的子树的长度(节点的子节点之间的最大值),它将解决您的问题问题,并且在常规插入\删除等过程中非常容易维护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多