给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
思路:
假设二叉树为root,指定的两个节点分别为p,q。三种情况,如果p,q分别位于root的两侧,则root就是答案,如果位于一侧,则递归。具体递归代码,递归出口条件为root为nullptr,或者root==p或者root==q时,返回root。然后分别求左右子树中,p和q的公共祖先。结果分别为left和right,如果left、right都有值,则答案为root。如果只有一个有值,则答案为有值的那个
代码:
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(!root || root == p || root == q) return root;
TreeNode* l = lowestCommonAncestor(root->left,p,q);
TreeNode* r = lowestCommonAncestor(root->right,p,q);
return l?(r?root:l):r;
}
};