更新:
我发现了我试图实现的示例: 管理MySQL中的层次数据. 。我想这样做,但是在JavaScript中,因为我正在构建一个应用程序,该应用程序是在层次结构中的评论,以更具体的reddit.com。如果您在Chrome Web浏览器上有漂亮的JSON扩展程序,请转到Reddit,然后单击“线程”注释,然后将.json添加到URL中以查看我正在解析的内容。
我得到的JSON数据很好,它只是通过评论来解析并添加适当的HTML以表明其嵌套了。
解决方案的想法?


旧问题:
我正在研究一个程序,并且在编写代码之前,我已经开始弄清楚逻辑。我正在获取以树格式的数据,但是每个父节点都有几个孩子的可能性,而我似乎可以找到唯一的树是带有stree或tree的数据,每个节点最多都有两个子节点。因此,我试图找出算法来评估这样的树的每个节点:

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

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

有帮助吗?

解决方案

如果您不使用递归,则需要辅助数据结构。队列将为您带来广度的遍历,而堆栈将为您带来深度优先的遍历。无论哪种方式,它看起来都像这样:

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

Wikipedia参考

其他提示

使用递归,而不是循环。
广度首次搜索
深度搜索
这些应该帮助您开始尝试完成的工作

只需像递归一样

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

大多数树遍历的最简单代码通常是递归的。对于像您这样的多路树来说,通常最容易拥有一个循环,它可以看着每个孩子的指针,并以该节点为论点,以称呼所有孩子的节点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top