我在做leetcode的一道题,给出一个搜索树。给出两个节点,寻找离它们最近的共同的父亲节点。这道题目很容易,我是这样写的
"""
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
while root:
if root.val > p.val and root.val > q.val:
root = root.left
if root.val < p.val and root.val < q.val:
root = root.right
else:
return root
"""但是没有通过,因为我使用的是if...if ...else...后来我尝试着改成if...elif...else...就很顺利通过了,我很疑惑在这个问题上两种写法应该结果是一样的阿?我哪里想错了呢?
2 回答
子衿沉夜
TA贡献1828条经验 获得超3个赞
在 root.val > p.val 且 root.val > q.val时, 第一个if虽然执行了, 但root值变了, 但第二个if仍会比较, 第二个if或else 一定会执行, 最终结果会不要样.
可以这样改的(加一个return):
if root.val > p.val and root.val > q.val:
root = root.left #此时root已不是原来的root, 接下的比较是新的root值
continue
if root.val < p.val and root.val < q.val:
root = root.right
else:
return root
BIG阳
TA贡献1859条经验 获得超6个赞
if if else这种结构 和 if elseif else逻辑上有着本质区别啊。当第一个if满足的情况下,第一种写法可能会执行到else直接return 第二种则进入第二次循环,继续走逻辑。
添加回答
举报
0/150
提交
取消