遍历树的每个节点到给定深度

时间:2015-05-06 19:09:27

标签: algorithm tree

我有一个完全像家谱一样的二叉树。以我所谓的“领导孩子”为根,父母双方都在下面,然后是下面的4个祖父母,然后是8个以下的祖父母。所以基本上是一个深度为4代的二叉树。

我希望能够遍历每个节点并提取每个节点的信息(即名称)并将其存储在一个数组中 - 该数组当然会有15个元素,共4代(1 + 2 + 4 + 8) )。我正在努力递归地做这件事。我在网上找到的所有使用常用方法(预订,有序,后序)的例子只是在到达空节点时停止,但这不是我想要做的:我想要每个节点要访问但是当所有节点都被访问了4代(或任何给定的代数时)就停止了。关键是要精确停留4代,即使有些节点是空的或空的。有人可以提供解决方案吗?多年来我一直在垂头丧气。感谢阅读

2 个答案:

答案 0 :(得分:1)

这是MIU的一个实现(编造):

 traverse(node):
     traverse_(node, 0)

 traverse_(node, i):
     if i >= 4:
         return

     # Do stuff here.

     traverese_(node.left, i + 1)
     traverese_(node.right, i + 1)

现在您只需要在根节点上调用traverse

答案 1 :(得分:0)

递归深度优先搜索确实会在到达叶节点时停止,也就是说,没有任何子节点的节点(注意你可以调用的内容"父母"在从图形理论的角度来看,家庭树实际上被称为“孩子们”。但是,因为它是递归算法,所以"停止"只是意味着算法将返回到它所来自的节点,并尝试该节点的其他子节点。因此整个算法不会停止。标准DFS,无论是前缀,中缀还是后缀,都将访问整个树。您唯一需要做的就是在递归函数中添加一个额外的参数:一个跟踪当前深度的参数。