同一棵树| leetcode解决方案的错误复杂度分析

时间:2019-06-17 11:59:34

标签: python tree

关于leetcode问题的解决方案的空间复杂度分析,我有一个问题:100.同一棵树

问题: 给定两个二进制树,编写一个函数来检查它们是否相同。如果两个二叉树在结构上相同并且节点具有相同的值,则认为它们是相同的。

解决方案代码:

from collections import deque
class Solution:
    def isSameTree(self, p, q):
        """
        :type p: TreeNode
        :type q: TreeNode
        :rtype: bool
        """    
        def check(p, q):
            # if both are None
            if not p and not q:
                return True
            # one of p and q is None
            if not q or not p:
                return False
            if p.val != q.val:
                return False
            return True

        deq = deque([(p, q),])
        while deq:
            p, q = deq.popleft()
            if not check(p, q):
                return False

            if p:
                deq.append((p.left, q.left))
                deq.append((p.right, q.right))

        return True

我的问题:

Leetcode中解决方案的空间复杂性分析表明,对于完全不平衡的树,保持双端队列为O(N)。但是,我认为空间复杂度绝对不是O(N)。我使用以下示例来说明原因:假设root = 1,root.left = 2,root.left.left = 3,root.left.left.left = 4,N为None。以下是双端队列的不同阶段。对于每个阶段,我们弹出一个项目,然后增加两个项目,除非遇到N。

[1]-> [2,N]-> [N,3,N]-> [3,N]-> [N,4,N]-> [4,N]-> [N, N,N]

从上面的双端队列可以看到,大小永远不会达到N(其中N是节点数)

我可以说这种算法的空间复杂度不是O(N)(对吗?),但是我不能确定它是什么。

0 个答案:

没有答案