文档讲解:代码随想录
视频讲解:235. 二叉搜索树的最近公共祖先_哔哩哔哩_bilibili
状态:
// 递归
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);
return root;
}
}
// 迭代
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
TreeNode res = root;
while(res != null) {
if(res.val > p.val && res.val > q.val)res = res.left;
else if(res.val < p.val && res.val < q.val)res = res.right;
else return res;
}
return res;
}
}
// 递归
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null)return new TreeNode(val);
if(root.val > val)root.left = insertIntoBST(root.left, val);
else if(root.val < val)root.right = insertIntoBST(root.right, val);
return root;
}
}
// 迭代
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null)return new TreeNode(val);
TreeNode cur = root;
TreeNode pre = null;
while(cur != null) {
if(cur.val > val){
pre = cur;
cur = cur.left;
}
else if(cur.val < val){
pre = cur;
cur = cur.right;
}
}
if(pre.val > val)pre.left = new TreeNode(val);
else pre.right = new TreeNode(val);
return root;
}
}
// 递归
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if(root == null)return root;
if(root.val == key) {
if(root.left == null && root.right == null)return null;
else if(root.left == null)return root.right;
else if(root.right == null)return root.left;
TreeNode cur = root.right;
while(cur.left != null) {
cur = cur.left;
}
cur.left = root.left;
return root.right;
}
if(root.val > key)root.left = deleteNode(root.left, key);
else root.right = deleteNode(root.right, key);
return root;
}
}
// 迭代
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if(root == null)return root;
TreeNode cur = root;
TreeNode pre = null;
while(cur != null) {
if(cur.val == key)break;
pre = cur;
if(cur.val > key)cur = cur.left;
else if(cur.val < key) cur = cur.right;
}
if(cur == null)return root;
if(pre == null)return deleteOneNode(cur);
if(pre.val > key)pre.left = deleteOneNode(cur);
else pre.right = deleteOneNode(cur);
return root;
}
public TreeNode deleteOneNode(TreeNode root) {
if(root == null)return root;
if(root.right == null)return root.left;
TreeNode cur = root.right;
while(cur.left != null) {
cur = cur.left;
}
cur.left = root.left;
return root.right;
}
}