Math 树遍历方法的大O表示法

Math 树遍历方法的大O表示法,math,Math,对于树结构中的每个节点(在前序遍历中)也必须接触所有祖先节点的方法,其运行时的大复杂性是什么?O(n*avg(树高))?也就是说,我们的方法/函数的运行时复杂性是O(n*avg(树高))?(在一般情况下) 也许avg(树高)可以定义为(最小+最大)/2,但是hm我可能误解了,但是如果你说你需要遍历所有节点(n),然后触摸每个节点的每个应答器(最坏的情况是:平衡二叉树中的logn),那么我认为它应该是O(n*log(n))。常数不适用于大O符号,但(正如下面@interjay所指出的)平均值可能是

对于树结构中的每个节点(在前序遍历中)也必须接触所有祖先节点的方法,其运行时的大复杂性是什么?O(n*avg(树高))?也就是说,我们的方法/函数的运行时复杂性是O(n*avg(树高))?(在一般情况下)


也许avg(树高)可以定义为(最小+最大)/2,但是hm

我可能误解了,但是如果你说你需要遍历所有节点(n),然后触摸每个节点的每个应答器(最坏的情况是:平衡二叉树中的logn),那么我认为它应该是
O(n*log(n))
。常数不适用于大O符号,但(正如下面@interjay所指出的)平均值可能是


假设一棵不平衡的树,接触所有祖先的最坏情况大约是
n/2
,在大O中正好是n。

在一棵不平衡的树中,树的高度可以达到
n
。平均值可以很好地应用于大O。我在解决平衡问题上击败了你:-)我在平均值上得到了纠正(如果简单的话,我会喜欢一个例子)。我的意思是你可以在这里说运行时是
O(n*avg(node depth))
-这可能就是OP的意思。平均节点深度的范围可以是O(log(n))到O(n),具体取决于树的平衡程度。如果根节点有两个子节点,一个子节点在一侧,其余子节点在另一侧,则平均节点深度不会提供上限。对于给定的输入类,您可以更精确地计算运行时间,但它破坏了表示法的简单性。好的,比我在论文中描述的O(n^2)运行时复杂度可能更好(对于一般树,不能是平衡树,也不需要二叉树)。这是对O(n^2)的改进,这里描述的算法(在插入第一个树结构期间调整节点的子代数)是O(n)的改进,O(n)只是在预序遍历中插入树结构中的节点(insertAsFirstChild()或insertAsRightSibling())然后在后序遍历期间调整每个节点的子体计数。