【问题标题】:Algorithm for Tree Traversal树遍历算法
【发布时间】:2011-01-27 17:27:53
【问题描述】:

更新:
我发现了更多我想要实现的示例:Managing Hierarchical Data in MySQL。我想这样做,但在 JavaScript 中,因为我正在构建一个应用程序,它接收分层结构的 cmets,更具体地说是 reddit.com。如果您的 chrome 网络浏览器上有 Pretty JSON 扩展,请转到 reddit 并单击线程 cmets,然后将 .json 添加到 url 以查看我正在解析的内容。
我得到的 JSON 数据很好,它只是通过 cmets 解析并添加适当的 HTML 以显示它的嵌套。
解决方案的想法?


老问题:
我正在编写一个程序,我已经到了在编写代码之前需要弄清楚逻辑的部分。 我正在接受树格式的数据,但每个父节点可能有几个子节点,我似乎可以找到的唯一树是具有权重的树或树,其中每个节点最多有两个子节点。所以我试图找出算法来评估树的每个节点,如下所示:

startingParent[15] // [# of children]
    child1[0]
    child2[5]
       child2ch1[4]
       ...
       child2ch5[7]
    child3[32]
    ...
    child15[4]

现在,当我尝试写出我的算法将如何工作时,我最终编写了嵌套的 for/while 循环,但我最终为树的每个高度级别编写了一个循环,用于动态数据和高度未知的树每个节点的子节点数量未知,这不起作用。我知道在某个时候我学会了如何像这样遍历一棵树,但它现在完全逃离了我。有人知道这是如何在循环方面完成的吗?

【问题讨论】:

    标签: algorithm tree multiway-tree


    【解决方案1】:

    如果您不打算使用递归,则需要一个辅助数据结构。队列将为您提供广度优先遍历,而堆栈将为您提供深度优先遍历。无论哪种方式,它看起来大致是这样的:

    structure <- new stack (or queue)
    push root onto structure
    while structure is not empty
      node <- pop top off of structure
      visit(node)
      for each child of node
         push child onto structure
    loop
    

    维基百科参考文献

    【讨论】:

      【解决方案2】:

      使用递归,而不是循环。
      Breadth first search
      Depth first search
      这些应该可以帮助您开始尝试完成的工作

      【讨论】:

      • 如果不是家庭作业,他肯定想要一个 DFS。不过,他确实特别要求提供一种使用循环的方法。无论哪种方式,BFS 都不能很好地使用递归。
      • 是的,这不是家庭作业,这是针对我正在构建的应用程序,我正在尝试填充一个列表,它就像一个 cmets 页面,因此有多个级别的回复。主要评论、回复、回复该回复等。所以我一直在寻找一种方法来解析 cmets 并为结构构建适当的 HTML。
      【解决方案3】:

      只需要像这样使用递归

      def travel(node):
          for child in node.childs:
              # Do something
              travel(child)
      

      【讨论】:

      • 只是一个小调整,但“做某事”通常在循环之外更清晰。这种方式错过了根节点。
      【解决方案4】:

      大多数树遍历的最简单代码通常是递归的。对于像你这样的多路树,通常最简单的方法是有一个循环来查看每个指向子节点的指针,并以该节点作为参数调用所有子节点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-27
        • 1970-01-01
        相关资源
        最近更新 更多