【问题标题】:Time complexity of level order traversal层序遍历的时间复杂度
【发布时间】:2012-12-14 11:58:05
【问题描述】:

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

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);
      }

}

【问题讨论】:

    标签: algorithm data-structures big-o time-complexity tree-traversal


    【解决方案1】:

    它是O(n),或者准确地说是Theta(n)

    查看树中的每个节点——每个节点最多“访问”3次,至少一次)——发现时(所有节点),从左儿子回来时(非叶子)当从右儿子(非叶子)回来时,最多总共访问 3*n 次,每个节点至少访问 n 次。每次访问为O(1)(队列推送/弹出),总计-Theta(n)

    【讨论】:

      【解决方案2】:

      时间和空间复杂度为 O(n)。 n = 没有。节点数。

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

      时间复杂度 - O(n) 每个节点被访问两次。期间有一次 入队操作和出队操作期间一次。

      这是 BFS 的一个特例。您可以阅读有关 BFS(广度优先搜索)http://en.wikipedia.org/wiki/Breadth-first_search 的信息。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-07-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-01
          • 2015-02-16
          • 1970-01-01
          • 2017-01-25
          相关资源
          最近更新 更多