/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
//主要分为几种情况
//1 如果p或者q有一个直接与root相等,则直接返回root即可
//2 如果p q都不等于root,则进行下一步判断,如果都在左子树当中,则堆左子树进行递归
//3 如果都在右子树当中,则对右子树进行递归
//4 如果一个在左子树,一个在右子树当中,则当前root就是结果,直接返回即可。
TreeNode temp=root;
if(root==p||root==q)
{
return temp;
}
else
{
if(isIn(temp.left,p)&&isIn(temp.left,q))
{
return lowestCommonAncestor(temp.left,p,q);
}
else if(isIn(temp.right,p)&&isIn(temp.right,q))
{
return lowestCommonAncestor(temp.right,p,q);
}
else
return temp;
}
}
public boolean isIn(TreeNode root,TreeNode target)
{
boolean res=false;
if(target==root)
return true;
else
{
if(root.left!=null)
res=isIn(root.left,target);
if(root.right!=null&&res==false)
res=isIn(root.right,target);
}
return res;
}
}