[二叉樹]面試題 04.08. 首個共同祖先(medium)

題目:
在這裏插入圖片描述
題解:

  • 遞歸三部曲,寫好遞歸出口,遞歸式和處理遞歸結果便可得解。
  • 首個公共祖先有三種情況:
  • 1)p、q爲以 root 爲根節點的左右子樹中,則 root 爲祖先
  • 2)p、q在以 root 爲節點的左子樹中,則 root->left 爲祖先(即在右子樹中找不到p、q節點)
  • 3)p、q在以 root 爲節點的右子樹中,則 root->right爲祖先(即在左子樹中找不到p、q節點)

代碼如下:

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        //1、遞歸出口:根節點爲空,或者找到p或q節點了
        if(!root||root==p||root==q)return root;
        //2、遞歸式:從根節點的左右子樹尋找p、q的節點
        TreeNode *left=lowestCommonAncestor(root->left,p,q);
        TreeNode *right=lowestCommonAncestor(root->right,p,q);
        //3、判斷其祖先的位置
        if(left&&right)return root;//在以root爲根節點的左右子樹中找到p、q節點了,則root爲祖先
        if(left&&!right)return left;//在以root爲根節點的右子樹沒找到p、q節點,則其左子樹根節點爲祖先
        return right;////在以root爲根節點的左子樹沒找到p、q節點,則其右子樹根節點爲祖先
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章