二叉树的最近公共祖先
编写一个函数递归调用,从根节点开始判断,若该节点为空,则返回null,若等于q或p,则返回该节点,若未找到公共祖先,则逐层向下递归,一个根节点分左右两个子节点,递归返回时对结果判断,若左边没找到,则返回右节点,同理右边。若两边都找到,则该节点为公共祖先。
代码如下:
public class Solution {
public TreeNode LowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null)
{
return null;
}
if(root.val==p.val||root.val==q.val)
{
return root;
}
TreeNode left= LowestCommonAncestor(root.left, p, q);
TreeNode right=LowestCommonAncestor(root.right, p, q);
if(left==null)
return right;
if(right==null)
return left;
return root;
}
}
结果: