题目描述:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
//方法:递归+最近公共祖先特点
/*
从左右子树分别进行递归,即查找左右子树上是否有p结点或者q结点,就一共有4种情况:
第一种情况:左子树和右子树均找没有p结点或者q结点;或者当前就是p/q;
第二种情况:左子树上没找到,返回右子树的查找结果;
第三种情况:右子树上没找到,返回左子树的查找结果;
第四种情况:左右子树上均能找到,说明此时的p结点和q结点分居root结点两侧,此时就应当直接返回root结点了。
*/
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)
{
if(root==NULL||root==p||root==q)
{
return root;//需要先判空,判相等
}
TreeNode* left=lowestCommonAncestor(root->left,p,q);//查看左子树中是否有p/q
TreeNode* right=lowestCommonAncestor(root->right,p,q);//查看右子树中是否有p/q
if(left==NULL)
{
return right;
}
if(right==NULL)
{
return left;
}
return root;
}