广度优先或深度优先搜索在特定深度寻找儿童?

时间:2017-08-30 16:17:46

标签: algorithm graph binary-search-tree

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

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

很明显,深度优先应该是最好的方法,但我不太确定。树的宽度非常小,这通常是使用广度优先搜索的原因。另外,如果我使用深度优先搜索,那么我最终可能会进入一个高度非常接近n但小于n的子树。在这种情况下,我会浪费大量时间穿越一棵树,这棵树不可能给我我想要的答案

1 个答案:

答案 0 :(得分:1)

  1. DFS总是比BFS更有效率。由于BFS迭代深度为1的所有节点,然后是深度为2的所有节点,依此类推,为了找到长度为n的路径,BFS将首先遍历树中的所有路径。长度< = n-1。在绝对最坏的情况下,DFS会一直这样做,直到找到所请求的路径,但在一般情况下,DFS在我看来会更有效率。

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