returns 一个 2D ArrayList 的 BFS 算法的时间复杂度是多少?

What's the time complexity of this BFS alg that returns a 2D ArrayList?

我想弄清楚这种方法的时间复杂度是多少,以便更好地计算时间复杂度。其他人告诉我,这将是最坏的情况 O(n^2) (n 是树中的元素)但我很困惑,因为外部 while 循环只会达到级别的数量,而不是总元素。

任何帮助都会很棒!

public List returnLevelOrder(TreeNode root) { ret = new ArrayList ();

Queue<Integer> queue = new List<Integer>();

if(root==null){
    return ret;
}

queue.add(root);

while(!queue.empty()) {

    ArrayList<Integer> level = new ArrayList<Integer>();

    int levelSize = queue.size();

    while(levelSize >0) {
        TreeNode currNode = queue.poll();
        level.add(currNode.val);
        levelSize--;

        if(currNode.left != null) {
            queue.add(currNode.left.val);
        }

        if(currNode.right != null) {
            queue.add(currNode.right.val);
        }

    }
    ret.add(level);

}

return ret;

}

它是 O(n) - 你访问所有元素一次 - 它是一个迭代树遍历。