Graph 图的级序遍历的时间复杂度

Graph 图的级序遍历的时间复杂度,graph,tree,time-complexity,binary-tree,space-complexity,Graph,Tree,Time Complexity,Binary Tree,Space Complexity,时间复杂度:O(n) 有人能用数学中的O(n)来解释时间复杂性吗。 我可以找到而循环是O(logn) 公共: 向量levelOrder(节点*根){ if(!root)返回向量{}; 队列q; q、 推(根); 向量res; 而(!q.empty()){ //BFS遍历 int size=q.size(); 向量级; 对于(int i=0;ival); 用于(自动n:tmp->children) q、 推(n); } res.向后推(水平); } 返回res; } } 如果每个节点只访问一次,那

时间复杂度:O(n) 有人能用数学中的O(n)来解释时间复杂性吗。 我可以找到循环是O(logn)

公共:
向量levelOrder(节点*根){
if(!root)返回向量{};
队列q;
q、 推(根);
向量res;
而(!q.empty()){
//BFS遍历
int size=q.size();
向量级;
对于(int i=0;ival);
用于(自动n:tmp->children)
q、 推(n);
}
res.向后推(水平);
}
返回res;
}
}

如果每个节点只访问一次,那么这里的复杂性将是O(n)。这个问题不是一个“分而治之”的算法,因为我们最终将访问一个节点的所有分支(在二分法算法中,您只访问一个分支)

编辑

递归算法的复杂性可能非常棘手。这个公式可以帮助你:当你的时间复杂度为T(n)时

T(n)=aT(n/b)+f(n)

如果f(n)=Θ(nd),其中d≥ 0,那么

  • 如果a
  • 如果a=bd,则T(n)=Θ(nd*log(n))
  • T(n)=Θ(nlogb(a))如果a>bd
在你的例子中,f(n)=Θ(1),因为你在一个节点上什么都不做,所以d=0。通常情况下,a=b>1,因此是第三种情况。Logb(a)=1,因为b=a,所以您的复杂性为Θ(n1)

public:
    vector<vector<int>> levelOrder(Node* root) {
        if(!root) return vector<vector<int>>{};
        queue<Node*> q;
        q.push(root);
        vector<vector<int>> res;
        
        while(!q.empty()){
            //BFS traversal
            int size= q.size();
            vector<int> level;
            
            for(int i= 0; i< size; i++){
                auto tmp= q.front(); q.pop();
                level.push_back(tmp->val);
                for(auto n: tmp->children)
                    q.push(n);
            }
            res.push_back(level);
        }
        return res;
    }
}