def _height2(self, p): if self.is_leaf(p): return 0
else: return 1 + max(self._height2(c) for c in self.children(p))
我无法理解它在O(n)时间复杂度中是如何工作的。请帮助我学习这一点。
慕斯王
浏览 84回答 1
1回答
斯蒂芬大帝
假设n代表树中的节点数,我们可以观察到以下情况:c in self.children(p)永远不会产生相同的c两次:除根之外的所有节点在某个时刻都将是该c,并且仅一次。所以这段代码代表每个节点的恒定时间复杂度。此外,_height2将为所有节点调用一次。对于根,这是初始调用,对于所有其他节点,这是递归调用。所有其他代码(除了对子节点的迭代和递归调用之外)表示每个节点的恒定时间复杂度。所以我们的时间复杂度是O(n) 。