代码随想录打卡第20天 | 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点
235. 二叉搜索树的最近公共祖先 链接:235. 二叉搜索树的最近公共祖先 文章:代码随想录 视频:B站讲解 状态:⚠️ 第一想法 利用二叉搜索树的性质,可以用数值大小确定子树,第一次遇到的在 [p, q] 或者 [q, p] 间的数,就是最近公共祖先; BST 中,对于当前节点 cur,有三种情况: 情况一:cur 的值比 p 和 q 都大。说明 p 和 q 都在 cur 的左子树里,公共祖先一定在左边,cur 不是答案。 情况二:cur 的值比 p 和 q 都小。同理,都在右子树,往右走。 情况三:cur 的值在 p 和 q 之间(含等于)。这时候只有两种可能: p 和 q 分别在 cur 的左右子树 → cur 就是公共祖先 cur 本身就是 p 或 q 中的一个,另一个在它的子树里 → cur 也是公共祖先 看完题解后的想法 – 实现中遇到的困难 需要确定 p 和 q 的大小关系; 代码 class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if (p->val > q->val) swap(p, q); TreeNode* cur = root; while (cur) { if (cur->val >= p->val && cur->val <= q->val) { return cur; } else if (cur->val < p->val) { cur = cur->right; } else { cur = cur->left; } } return nullptr; } }; 701. 二叉搜索树中的插入操作 链接:701. 二叉搜索树中的插入操作 文章:代码随想录 视频:B站讲解 状态:⚠️ 第一想法 二叉搜索树,可以直接比大小前进;然后找到空位就可以插进去了; ...