鍍金池/ 問答/Python  網(wǎng)絡安全/ python中if語句的問題?

python中if語句的問題?

我在做leetcode的一道題,給出一個搜索樹。給出兩個節(jié)點,尋找離它們最近的共同的父親節(jié)點。
這道題目很容易,我是這樣寫的

"""

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...
就很順利通過了,我很疑惑在這個問題上兩種寫法應該結果是一樣的阿?我哪里想錯了呢?

回答
編輯回答
尛曖昧

if if else這種結構 和 if elseif else邏輯上有著本質區(qū)別啊。當?shù)谝粋€if滿足的情況下,第一種寫法可能會執(zhí)行到else直接return 第二種則進入第二次循環(huán),繼續(xù)走邏輯。

2018年1月22日 14:05
編輯回答
蔚藍色

在 root.val > p.val 且 root.val > q.val時, 第一個if雖然執(zhí)行了, 但root值變了, 但第二個if仍會比較, 第二個if或else 一定會執(zhí)行, 最終結果會不要樣.

可以這樣改的(加一個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
2018年5月31日 08:27