问题描述:
给出一个二叉树,输入两个树节点,求它们的最低公共祖先。一个树节点的祖先节点包括它本身。
注意:
输入的二叉树不为空;输入的两个节点一定不为空,且是二叉树中的节点;
样例
解题思路:采用递归方法,分情况讨论,首先查找左边的最低公共祖先,然后查找右边的最低公共祖先,两者比较,如果两者都存在则证明是根节点是其公共祖先,如果其中一边存在,那么就返回对应的left或者right。边界情况,如果输入的节点恰好是根节点,那么返回根节点即可,如果最低公共子节点不存在则返回null。
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(!root) return NULL;
if(root==p||root==q) return root;
auto left=lowestCommonAncestor(root->left,p,q);
auto right=lowestCommonAncestor(root->right,p,q);
if(left&&right) return root;
if(left) return left;
return right;
}
};