关于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)(对吗?),但是我不能确定它是什么。