1. 程式人生 > 其它 >leetcode 二叉搜尋樹的最近公共祖先(非二叉搜尋樹也適用) 簡單

leetcode 二叉搜尋樹的最近公共祖先(非二叉搜尋樹也適用) 簡單

做題的時候忽略了是二叉搜尋樹,就直接做的。最後的效率也不低:時間超過 91.82%,空間超過 72.45%

(二叉搜尋樹的話更簡單,這裡放上對普通二叉樹也適用的程式碼)

輔助函式返回值 pair<bool, TreeNode*>,當 pair.first 為真時,表示找到了最近公共祖先,存放於 pair.second,遞迴直接返回即可。

否則,就直接判斷 pair.second 是否為 null,如果不為 null 就表示找到了 p, q 中的某一個。

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        
return _lowestCommonAncestor(root, p, q).second; } pair<bool, TreeNode*> _lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q) { if(root == nullptr || root == p || root == q) return {false, root}; auto lef = _lowestCommonAncestor(root -> left, p, q); auto rig
= _lowestCommonAncestor(root -> right, p, q); if(lef.first || rig.first) { return lef.first ? lef : rig; } if(lef.second == p && rig.second == q || lef.second == q && rig.second == p)  // 好像可以寫成 if(lef.second && rig.second) return
{true, root}; return lef.second ? lef : rig; } };