树遍历算法

标签 algorithm tree multiway-tree

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


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

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

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

最佳答案

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

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

维基百科引用

关于树遍历算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819712/

相关文章:

用于绘制多层树的 Javascript 库

java - "Simple"Trie实现

algorithm - 从节点串构造多路树

python - 扭曲随机序列的变换产生随机序列?

python - 我的素性测试的时间复杂度是多少?

algorithm - 展开后x下的子树是否必然平衡?

json - 解码递归多路树

algorithm - 计算所有距离的总和

python - 使用 mptt 在 Python/Django 中创建 JSON 以反射(reflect)树结构的最快方法

javascript - 如何在 JavaScript 中递归搜索时更新对象数组(如果匹配)