大O和树遍历

Bra*_*ble 1 c++ tree big-o traversal

如果我有这样的功能:

void myfunction(node* root)
{
   for(int i = 0; i<root->children.size();i++)
   {
      myfunction(root->children[i]);
   }
}
Run Code Online (Sandbox Code Playgroud)

那是n ^ 2的大O还是n的大O?如果你有一个for循环并且在for循环中有一个函数调用它自己,那么Big O迭代次数是函数的吗?

Ron*_*lic 9

这是一个n树的有序遍历,但你击中了每个元素,所以它是O(n)(big-theta更合适).

  • O(n)是正确的,但它不是有序遍历.有人可能会说它是预订或后订单,但由于函数在每个节点都没有工作,所以没有办法真正*告诉它,它只是访问它们.在for循环之前做一些事情就是预先订购 - 在for循环之后做一些事情就是下订单. (3认同)
  • 新用户问一个非常学术性的问题=可能是家庭作业.我希望你至少理解为什么这是O(n)的基本原理. (2认同)
  • 让我们称之为深度优先遍历.我们知道的很多,至少:) (2认同)