思路:
按照二叉搜索树的性质,左儿子小于等于 根节点 ,右儿子大于等于 根节点,所以,如果满足这条性质,根节点就是答案,否则,如果两个点都在左边,递归左子树,否则递归右子树。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
//二叉搜索树
//p 左儿子 q 右儿子
if(p->val > q->val) swap(p,q);
if(p->val <= root->val && q->val >= root->val) return root;
if(q->val < root->val) return lowestCommonAncestor(root->left,p,q);
return lowestCommonAncestor(root->right,p,q);
}
};
评论区