You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

N叉树层序遍历时间复杂度解析:多层循环为何仍为O(N)?

N叉树层序遍历的时间复杂度问题

问题1

请问N叉树层序遍历的时间复杂度是否无论使用多少层循环,都始终为O(N)?

问题2

请考虑以下代码(用于生成结果向量,将N叉树每一层节点值存入单独的内层向量),这段代码的时间复杂度是多少?

// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
class Solution {
public:
    vector<vector<int>> levelOrder(Node* root) {
        queue<Node*>q;
        q.push(root);
        vector<vector<int>> v;  //Resultant vector
        vector<int> inn;        //inner vector
        if(!root){
            return v;
        }
        inn.push_back(root->val);
        while(!q.empty()){
            int qn=q.size();
            v.push_back(inn);
            inn.clear();
            for(int i=0;i<qn;i++){
                Node* cur=q.front();
                if((cur->children).size()){
                    for(auto child:cur->children){
                        q.push(child);
                        inn.push_back(child->val);
                    }
                }
                q.pop();
            }
        }
        return v;
    }
};

问题3

另外,在存在多层嵌套循环的情况下,如何将时间复杂度评估为O(N)?其中N为树的节点总数。


解答

  1. 对于第一个问题:是的,不管用多少层循环,N叉树层序遍历的时间复杂度始终是O(N)。

  2. 给定代码的时间复杂度就是O(N)。原因很直接:每个节点只会被入队一次、出队一次,每个节点的子节点也只会被遍历一次。所有循环的总执行次数加起来是节点总数N的常数倍——没有节点被重复处理,所以整体是线性时间。

  3. 多层嵌套循环下仍为O(N)的核心逻辑:

  • 时间复杂度评估看的是所有循环的总操作次数和输入规模的关系,而非循环嵌套的层数。
  • 在这个层序遍历里,外层while循环遍历树的每一层,中间for循环处理当前层的所有节点,最内层for循环遍历当前节点的子节点。但每个节点只会被中间循环处理一次,每个子节点只会被最内层循环处理一次。
  • 整个过程中,总操作次数等于节点总数N加上所有节点的子节点数量之和——而树的所有节点子节点数量之和刚好是N-1(除了根节点,每个节点都是某个父节点的子节点),所以总操作次数是O(N),和嵌套层数无关。

内容的提问来源于stack exchange,提问作者Gudapati Sai Geethika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:35:32