iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
Software Development

闖進Python異世界系列 第 29

[Day 29] 闖進Python異世界 - Lowest Common Ancestor

  • 分享至 

  • xImage
  •  

二元樹的相關題型中,有一個題目叫 Lowest Common Ancestor 我認為是相當經典的。

題目可以參考 HackerrankLowest Common Ancestor

以下的 Lowest Common Ancestor 簡稱為 lca

題目的意思是:
給定兩個相異樹節點,求出他們的共同祖先,但是公同祖先可能包含多個,因此我們的目標是最接近兩節點的公同祖先。

大概可以以三種情況來概括:(先假設兩節點資料 v1 < v2)

  1. v1 <= root.info <= v2 : root 恰好是 lca
  2. v1 < v2 < root.info : lca 在左子樹
  3. root.info < v1 < v2 : lca 在右子樹
def lca(root, v1, v2):
    if root is None:
        return None
    if v1 > v2: 
        v1, v2 = v2, v1
    if v1 <= root.info <= v2:
        return root
    if v1 < v2 < root.info:
        return lca(root.left, v1, v2)
    else:
        return lca(root.right, v1, v2)

這道題目不難,單純只是考考我們對二元搜尋樹的結構而已,但是是個很好的練習


上一篇
[Day 28] 闖進Python異世界 - Valid BST
下一篇
[Day 30] 闖進Python異世界 - Ending
系列文
闖進Python異世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言