java - 迭代遍历树以查找大小

标签 java tree iteration

我需要使用迭代算法查找树中元素的数量,但我发现代码在概念上很难编写。

我的做法是从根节点开始访问子节点,然后是这些子节点的子节点,以此类推。

这是我为一棵小树编写的代码,但不是真正的解决方案,因为我需要为每个深度级别添加一个额外的 block :

// Start the counter at 1 because the root node counts
int size = 1;

for(ITree child1 : root) {
    size++;
    for(ITree child2 : child1) {
        size++;
        for(ITree child3 : child2) {
            size++;
            for(ITree child4 : child3) {
                size++;
                for(ITree child5 : child4) {
                    size++;
                }
            }
        }
    }
}
return size;

最佳答案

概念上,保持一个栈(LinkedList等)。对于每个 child (现在,你的 child 循环),添加到堆栈。继续遍历堆栈,直到它最终为空。

这没有经过测试,但这应该完全符合您的要求。我只是使用 java.io.File 而不是您的“ITree”,因为我可以针对它进行编译:

int sizeOfTree(File root){
    // Start the counter at 1 because the root node counts

    int size = 1;

    LinkedList<File> stack = new LinkedList<File>();
    stack.add(root);

    while(!stack.isEmpty()){
        File f = stack.remove();
        for(File child : f.listFiles()){
            size++;
            stack.add(child);
        }
    }

    return size;
}

关于java - 迭代遍历树以查找大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8215610/

相关文章:

java - 使用 lambda 查找特定扩展名的文件

java - Web 应用程序上的网络质量指示器

javascript - 类别子类别树问题 javascript

JavaScript 迭代单元格子元素

java - 如何在两个方法之间拥有公共(public)变量?

java - 在 Spring Controller 方法参数中使用接口(interface)

algorithm - O(log n)的复杂性是什么意思?

algorithm - 寻找最小化节点深度总和的生成树

Javascript:查找相邻数组元素的乘积并返回最大的乘积

javascript - 如何在 Javascript for...in 循环中获取对象键的名称?