如何在Java中迭代地找到树的深度?

时间:2011-10-30 17:33:34

标签: java tree

在一次采访中,我被要求找到树的深度。我递归地做了,但随后面试官让我用迭代来做。我尽我所能,但我认为他看起来并不相信。任何人都可以在这里写伪代码或代码更好...感谢阅读帖子。

3 个答案:

答案 0 :(得分:2)

检查Way to go from recursion to iteration提供的答案。底线是您不必两次解决问题。如果你有一个非常好的递归算法,那么将它转换成迭代。

答案 1 :(得分:1)

Tree<Object> tree = ...; // source

class NodeMarker {
    public NodeMarker(TreeNode node, int depth) { ... }
    public TreeNode node;
    public int depth;
}

int depth = 0;
List<NodeMarker> stack = new LinkedList<NodeMarker>();
for (TreeNode node : tree.getChildren())
    stack.add(new NodeMarker(node, 1);

while (stack.size() > 1) {
    NodeMarker marker = stack.get(0);
    if (depth < marker.depth)
        depth = marker.depth;

    if (marker.node.hasChildren())
        for (TreeNode node : marker.node.getChildren())
            stack.add(new NodeMarker(node, marker.depth + 1);
}

答案 2 :(得分:0)

迭代而不是递归意味着你是在树下,而不是让每个函数调用产生两个新的函数调用,你可以将图层的每个成员存储在一个数组中。尝试从包含指向根的指针的(一个元素)数组开始。然后,在循环中(我只使用while(1))迭代该数组(currentLayer)并创建一个新数组(nextLayer)并将currentLayer中每个元素的子元素添加到nextLayer。如果nextlayer为空,那么你现在处于最深层,否则将深度增加1,将nextLayer复制到currentLayer,然后重新执行。