day22
思路:
本题最重要的就是理解二叉树的性质。
多观察二叉树
关键点:当遍历到第一个在[p,q] / [q,p] 区间之内的结点,就进行返回。
同时,因为二叉搜索树是有序的,所以如果 q,p的值都大于或者小于根结点的值,那么 q,p 都在根结点的右边或者左边。
这里的代码没有进行是否为空的判断,因为题目已经给明表示一定会有q , p在树中,所以不可能为空。
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root->val > p->val && root->val > q->val)
return lowestCommonAncestor(root->left, p, q);
else if (root->val < p->val && root->val < q->val)
return lowestCommonAncestor(root->right, p , q);
else
return root;
}
};