思路
|
題目的要找到兩個節點的「最近共同祖先」,以右圖為例,
|
|
|
第一種情況:其中一個節點是另一個節點的祖節點,此時回傳祖節點。 |
|
|
程式碼
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* node, TreeNode* p, TreeNode* q) {
if(!node || node == p || node == q) return node;
TreeNode* left = lowestCommonAncestor(node->left, p, q);
TreeNode* right = lowestCommonAncestor(node->right, p, q);
if(!left && !right) return nullptr; // 都沒有找到, 把空往上傳
if(left && right) return node; // 左邊有找到, 右邊也有找到, 自己就是祖先
// 現在只有一個是空的, 返回不是空的那一邊
return !left ? right : left;
}
};
複雜度分析
- 時間複雜度:
- 空間複雜度:棧空間

情況一
情況二