iT邦幫忙

2026 iThome 鐵人賽

DAY 14
0

① node == p / q
→ 找到了,直接回傳

② left 有、right 有
→ p q 分居左右
→ node 就是答案

③ 只有一邊有
→ 答案還在那一邊
→ 繼續往上傳

Tree 沒有 parent → 從 root 往下 DFS;recursion 的 return 本身就是往上傳結果

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* node, TreeNode* p, TreeNode* q) { // 從當下 node 找 p、q 的最低共同祖先
        if (!node || node == p || node == q)                                 // 沒節點,或已直接找到 p / q
            return node;                                                      // 把找到的 node 往上一層回傳

        TreeNode* left = lowestCommonAncestor(node->left, p, q);              // 去左邊找 p / q
        TreeNode* right = lowestCommonAncestor(node->right, p, q);            // 去右邊找 p / q

        if (left && right)                                                     // 左右兩邊都找到東西
            return node;                                                       // p、q 分居兩邊 → 當下 node 就是 LCA

        return left ? left : right;                                            // 只有一邊找到 → 把那邊的結果往上傳
    }
};

上一篇
preprocessing v5 & 297 v3
下一篇
yolo26m 素材太少了啦& 236 v2
系列文
快樂演算法15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
AndyAWD
iT邦新手 1 級 ‧ 2026-09-02 23:11:06

今天太困難

我要留言

立即登入留言