思路分析:
因为题目给出的是二叉搜索树,而二叉搜索树的特点是:左叉上节点的值都小于其根节点,右叉上的值都大于其根节点。利用此特性进行解题。
若p、q节点的值均小于根节点root,则p、q均在root的右叉上,此时将root节点向右叉节点移一位;
同理,若p、q节点的值均大于根节点root,则p、q均在root的左叉上,此时将root节点向左叉节点移一位;
经过充分循环使root节点移动后,得到满足条件root节点值介于p与q节点值之间时,就得到了p、q的最近公共祖先,此时返回root。
代码实现(c++):
class Solution
{
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)
{
while(true)
{
if(root->val>p->val&&root->val>q->val)
root=root->left;
else if(root->val<p->val&&root->val<q->val)
root=root->right;
else
return root;
}
}
};
运行结果: