python中if语句的问题?

我在做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...
就很顺利通过了,我很疑惑在这个问题上两种写法应该结果是一样的阿?我哪里想错了呢?

小怪兽爱吃肉
浏览 551回答 2
2回答

子衿沉夜

在 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阳

if if else这种结构 和 if elseif else逻辑上有着本质区别啊。当第一个if满足的情况下,第一种写法可能会执行到else直接return 第二种则进入第二次循环,继续走逻辑。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python