题目一:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null)
{
return null;
}
if(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) //如果左子树为空,则p和q位于右子树,第一个返回的就是公共子树
{
return right;
}
else if(right==null)
{
return left;
}
else{ //说明p和q不在同一侧
return root;
}
}
题目二:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null)
{
return null;
}
if(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) //如果左子树为空,则p和q位于右子树,第一个返回的就是公共子树
{
return right;
}
else if(right==null)
{
return left;
}
else{ //说明p和q不在同一侧
return root;
}
}