//递归
//注意二叉树为二叉搜索树
class Solution {
public:
//时间O(n)(n为二叉树节点个数), 空间O(logn)(二叉树的高度, 即递归栈的深度)
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(!root) return nullptr;
int rootVal = root->val;
int pVal = p->val;
int qVal = q->val;
if(pVal < rootVal && qVal < rootVal) {
return lowestCommonAncestor(root->left, p, q);
}
if(pVal > rootVal && qVal > rootVal) {
return lowestCommonAncestor(root->right, p, q);
}
return root;
}
};
//迭代
class Solution {
public:
//时间O(n)(n为二叉树节点个数), 空间O(1)
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(!root) return nullptr;
TreeNode* node = root;
int pVal = p->val;
int qVal = q->val;
while(node) {
int rootVal = node->val;
if(pVal < rootVal && qVal < rootVal) {
node = node->left;
}else if(pVal > rootVal && qVal > rootVal) {
node = node->right;
}else {
return node;
}
}
return nullptr;
}
};
LeetCode235. 二叉搜索树的最近公共祖先
最新推荐文章于 2022-07-26 18:33:24 发布