【问题标题】:Traversing a graph Vs Traversing a tree遍历图与遍历树
【发布时间】:2009-03-26 21:40:44
【问题描述】:

遍历图的函数是否同样适用于遍历树?

【问题讨论】:

    标签: tree graph-theory


    【解决方案1】:

    树只是一种特殊类型的图,称为有向无环图,所以是的……广度优先和深度优先遍历都适用于树。

    我可以写出关于广度和深度优先遍历之间差异的详细解释,但我可能会弄错(我还不是一个沉重的 comp-sci 人)。

    只要说广度和深度优先遍历之间的唯一区别就是处理顶点的顺序就够了。广度优先,您可以将其视为将顶点添加到“待处理”队列。深度优先,您可以将其视为将顶点添加到“待处理”堆栈中。当需要处理顶点时(在它们被添加到各自的数据结构中之后),您可以出列或弹出堆栈以获取下一个要处理的顶点。深度优先遍历的聪明版本使用递归来处理顶点,而不是将它们添加到堆栈中。

    我不知道这是否有帮助......

    快速谷歌搜索(我不知道是广度优先还是深度优先)找到this,这似乎很好地描述了 BFS 和 DFS 之间的差异。如果您想更深入地阅读,我还可以推荐 Steve Skiena 的 The Algorithm Design Manual

    【讨论】:

    • 感谢您的回答!但是你能把它稍微扩展一下来显示 BF 和 DF 之间的区别吗?
    • @DominikAntal 一棵树是单向的。节点只有对其子节点的引用,而不是从子节点到父节点的引用。
    【解决方案2】:

    一个可以遍历一般图的函数对于遍历树来说可能是多余的,因为在纯树中您不必检查循环。所以它会起作用,但更简单的东西也会起作用。

    【讨论】:

    • 哈哈。我倾向于反过来想:图表很麻烦,因为它们可能包含循环。
    • 确实 - 在你的脑海中保持两者紧密联系是值得的,因为人们经常从一棵树开始,然后引入类似于 Unix 文件系统中的符号链接的东西,突然间你'你得到了一个图而不是一棵真正的树,你的递归算法崩溃了。
    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多