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

阅读 2k
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

if if else这种结构 和 if elseif else逻辑上有着本质区别啊。当第一个if满足的情况下,第一种写法可能会执行到else直接return 第二种则进入第二次循环,继续走逻辑。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题