Algorithm 级序遍历的时间复杂度

Algorithm 级序遍历的时间复杂度,algorithm,data-structures,big-o,time-complexity,tree-traversal,Algorithm,Data Structures,Big O,Time Complexity,Tree Traversal,二叉树级顺序遍历的时间复杂度是多少?是O(n)还是O(对数n) void levelorder(节点*n) {queueq; q、 排队(n); 而(!q.empty()) { Node*Node=q.front(); DoSmthwith节点; q、 出列(); 如果(节点->左!=NULL) q、 排队(节点->左侧); 如果(节点->右侧!=NULL) q、 排队(节点->右侧); } } 它是O(n),确切地说是Theta(n) 查看树中的每个节点-每个节点最多“访问”3次,至少一次)-

二叉树级顺序遍历的时间复杂度是多少?是O(n)还是O(对数n)

void levelorder(节点*n)
{queueq;
q、 排队(n);
而(!q.empty())
{
Node*Node=q.front();
DoSmthwith节点;
q、 出列();
如果(节点->左!=NULL)
q、 排队(节点->左侧);
如果(节点->右侧!=NULL)
q、 排队(节点->右侧);
}
}
它是
O(n)
,确切地说是
Theta(n)


查看树中的每个节点-每个节点最多“访问”3次,至少一次)-发现时(所有节点),从左子(非叶)返回时,以及从右子(非叶)返回时,因此每个节点最多访问3*n次,至少访问n次。每次访问都是
O(1)
(队列推送/pop),总计为-
Theta(n)
时间和空间复杂性为O(n)。n=节点数

空间复杂性-队列大小与节点数成正比 O(n)

时间复杂度-O(n),因为每个节点访问两次。一次 排队操作和一次出列操作


这是BFS的一个特例。您可以阅读有关BFS(广度优先搜索)的内容。

解决此问题的另一种方法是确定级别顺序遍历非常类似于图形的遍历。宽度优先遍历的时间复杂度为
O(|V |+|E |)
,其中
|V |
是顶点数,
|E |
是边数

在树中,边的数量大约等于顶点的数量。这使得它在节点数量上总体上呈线性

void levelorder(Node *n)
{    queue < Node * >q;
     q.enqueue(n);

     while(!q.empty())
      {
         Node * node = q.front();
         DoSmthwith node;
         q.dequeue();          
         if(node->left != NULL)
         q.enqueue(node->left);
         if (node->right != NULL)
         q.enqueue(node->right);
      }

}