(Medium) 235. Lowest Common Ancestor of a Binary Search Tree
Methed: Iteration, queue, traverse by level
Time Complexity:
O
(
l
o
g
(
n
)
)
O(log(n))
O(log(n))
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root,
TreeNode p, TreeNode q) {
Deque<TreeNode> dq = new LinkedList<>();
dq.offer(root);
while(!dq.isEmpty()) {
TreeNode head = dq.poll();
if ((head.val >= q.val && head.val <= p.val)
|| (head.val >= p.val && head.val <= q.val)) {
return head;
}
if (head.left != null) {
dq.offer(head.left);
}
if (head.right != null) {
dq.offer(head.right);
}
}
return null;
}
}
(Medium) 701. Insert into a Binary Search Tree
Method: Recursion
Time Complexity:
O
(
l
o
g
(
n
)
)
O(log(n))
O(log(n))
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if (root == null) {
TreeNode insert = new TreeNode(val);
return insert;
}
if (root.val < val) {
root.right = insertIntoBST(root.right, val);
} else {
root.left = insertIntoBST(root.left, val);
}
return root;
}
}
(Medium) 450. Delete Node in a BST
Method: Recursion
Time Complexity:
O
(
l
o
g
(
n
)
)
O(log(n))
O(log(n))
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) { return root; }
// Delete the node
if (root.val == key) {
if (root.left == null && root.right == null) { return null; }
if (root.left == null && root.right != null) { return root.right; }
if (root.right == null && root.left != null) { return root.left; }
// Both left and right subtrees are not empty
TreeNode leftMost = root.right;
while (leftMost.left != null) { leftMost = leftMost.left; }
leftMost.left = root.left;
return root.right;
}
// Continue search
if (root.val > key) {
root.left = deleteNode(root.left, key);
} else {
root.right = deleteNode(root.right, key);
}
return root;
}
}