最坏的遍历非二叉树的情况

时间:2014-09-25 17:23:31

标签: algorithm tree big-o time-complexity big-theta

我编写了一个遍历非二叉树结构的递归算法。结构由目录或文件组成。

算法采用输入目录(curDirectory)并首先遍历树深度。当它到达分支的底部时,它会查找文件并打印一些信息。然后返回一个级别,查找文件并打印内容,依此类推。我们不知道目录中的子目录或文件的数量。

如何分析此算法的最差和平均时间?

for(int i = 0; i < curDirectory.getChildren().size(); i++){
        if (curDirectory.getChildren().get(i) instanceof INodeDirectory)
            blockCounter = blockCounter + digAndCount((INodeDirectory)curDirectory.getChildren().get(i));
    }

    for(int i = 0; i < curDirectory.getChildren().size(); i++){
        if (curDirectory.getChildren().get(i) instanceof INodeFile) {
            // print stuff and do other stuff 
        }
    }

1 个答案:

答案 0 :(得分:0)

您的树有N个目录和M个文件。迭代时,每个目录和文件都将被处理一次。所以时间复杂度将是O(M + N)。或者您可以决定处理目录和文件的时间大致相同,然后您可以说它的O(N)。

树的结构无关紧要。如果您有一个非常深的目录和子目录树,或者一个非常浅的树,其中所有目录都是根目录的子目录 - 每个文件和每个目录都会被访问一次。

当你看到搜索树的算法时,比如平衡的二叉树,其复杂度低于线性 - 因为它描述了那个不访问每个节点的树的搜索。