【发布时间】:2020-08-25 09:47:41
【问题描述】:
我有一个问题,我需要在 O((log(n))^2) 的时间复杂度中找到完整树中的节点数,例如(n 的日志)^2,我的目标是
找到h,即h= log n(树的高度,总是向左移动,因为它是一棵完整的树)然后来到h-1的每个节点并检查它是否有一个正确的节点,如果有,那么它必须有一个左节点(因为完整的树),如果它没有然后检查它是否有一个左节点,就像计算节点的数量一样。
问题是我认为是O(n),因为h = log(n)和这个高度的节点数是2^(h-1),所以整个过程是O(n)而不是O( (log n)^2)..
的输出
是 12,因为它有 12 个节点,时间复杂度为 O((log n)^2)
非常感谢您的帮助!谢谢。
【问题讨论】:
-
您可以在最后一行中的项目停止的地方执行二分搜索,然后计算节点数。
-
也许你可以将它与二分搜索结合起来(你知道它是一棵完整的树)......
-
@WillemVanOnsem 是否对 h-1 行中的每个节点进行二进制搜索? (不是最后一行)?
-
@StackOMeow:您只需在
h-1行的哪个节点处进行二分搜索,这些节点不再有两个子子节点。 -
@StackOMeow:完全正确。
标签: algorithm binary-tree big-o