iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0

Lowest Common Ancestor of a Binary Search Tree

thoughts

  • BST 性質:左子樹 < root < 右子樹
  • 若 p 和 q 都比 root 小 → 在左子樹
  • 若 p 和 q 都比 root 大 → 在右子樹
  • 否則 root 就是 LCA

kotlin

class TreeNode(var `val`: Int) {
    var left: TreeNode? = null
    var right: TreeNode? = null
}

class Solution {
    fun lowestCommonAncestor(root: TreeNode?, p: TreeNode?, q: TreeNode?): TreeNode? {
        var node = root
        while (node != null) {
            if (p!!.`val` < node.`val` && q!!.`val` < node.`val`) {
                node = node.left
            } else if (p.`val` > node.`val` && q.`val` > node.`val`) {
                node = node.right
            } else {
                return node
            }
        }
        return null
    }
}

follow up

  • 如果是 普通二元樹(不是 BST)怎麼辦?(需 DFS 遞迴)
  • 如果樹很大,可以考慮 儲存父節點,再走訪到 root 找交集。
  • 如果輸入是 多個節點的 LCA,怎麼改?

上一篇
#08
下一篇
#10
系列文
來都來了-涮就涮吧16
  1. 12
    #11
  2. 13
    #12
  3. 14
    #13
  4. 15
    #14
  5. 16
    #15
完整目錄
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言