这段代码的时间复杂度是否为O(n)?

时间:2014-12-19 13:29:27

标签: c complexity-theory loops binary-tree linked-list

struct lists * list_depth[ht];
for(int i=0; i<ht; i++)
    list_depth[i]=NULL;
insert_to_list(&list_depth[0], root);
for( int i = 1; i < ht; i++ )
{
    struct lists * temp = list_depth[i-1];
    while( temp != NULL )
    {
        if(temp->node->llink!=NULL)
            insert_to_list(&list_depth[i],temp->node->llink);
        if(temp->node->rlink!=NULL)
            insert_to_list(&list_depth[i],temp->node->rlink);
        temp = temp->link;
    }
}

代码段的时间复杂度是多少?由于循环是嵌套的,它是否具有n ^ 2的复杂性? 它是一个在二叉树的每个深度创建元素列表的程序。 我认为是O(n)。我对吗? [N是元素数量]

1 个答案:

答案 0 :(得分:2)

不,这是O(n * log(n)),因为您遍历树的长度,即O(log(n)),n次。