由于二叉搜索树呈现,左侧部分恒小于节点,右侧部分恒大于节点,所以我们可以通过直接比较节点和目标值来确定位置
之前卡在这个位置,用vector< bool >记录各个部分走法,记录为地图,但无法辨别我是应该向左取还是向右,尤其是刚好卡在中间的时候。
代码如下
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
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;
}
都小的时候向左检测,都大的时候向右,直到无法满足这两个判据为止返回