解题思路
利用二叉搜索树的性质,一当所要搜索的两个结点的值比根结点的值都小时,此时这两个结点的公共结点应该在二叉搜索树的左子树当中,二当所要搜索的两个结点的值比根结点的值都大时,则这两个结点的公共结点应该在二叉树的右子树当中。否则这两个结点的公共结点即为根结点
解题代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == null)
return null;
else if(p.val < root.val && q.val < root.val) //在是左子树当中
return lowestCommonAncestor(root.left,p,q);
else if(p.val > root.val && q.val > root.val)//在右子树当中
return lowestCommonAncestor(root.right,p,q);
else
return root;
}
}
总结
这个题用到了二叉搜索树的性质以及二叉树的递归遍历的基本操作,首先先考虑根为空的情况,之后分类讨论即可