Map 和 Set
Map 和 Set 是 Java 集合框架中处理键值对与唯一性数据的核心工具。它们底层通常基于树或哈希表实现,直接决定了查找效率。
二叉搜索树基础
二叉搜索树(BST)是一种特殊的二叉树结构。如果左子树不为空,则所有节点值小于根节点;右子树不为空,则所有节点值大于根节点。其左右子树同样遵循此规则。最显著的特性是:中序遍历结果是有序的。
查找逻辑
查找时,若目标值比当前节点大,向右走;反之向左。时间复杂度取决于树的高度。
// 查找示例
public boolean search(int key) {
TreeNode cur = root;
while (cur != null) {
if (cur.val > key) {
cur = cur.left;
} else if (cur.val < key) {
cur = cur.right;
} else {
return true;
}
}
return false;
}
性能分析
- 最好情况:O(logN),完全二叉树形态。
- 最坏情况:O(N),退化为单分支链表。
插入与删除
插入时需找到合适位置,若已存在相同元素则拒绝插入。删除操作相对复杂,分三种情况:
- 无左子树:用右子树替代。
- 无右子树:用左子树替代。
- 左右子树均存在:通常替换为右子树中的最小值(或左子树最大值),然后递归删除该替换节点。
private void removeNode(TreeNode cur, TreeNode parent) {
if (cur.left == null) {
if (cur == root) {
root = cur.right;
} else if (cur == parent.left) {
parent.left = cur.right;
} else {
parent.right = cur.right;
}
} (cur.right == ) {
(cur == root) {
root = cur.left;
} (cur == parent.left) {
parent.left = cur.left;
} {
parent.right = cur.left;
}
} {
cur;
cur.right;
(target.left != ) {
parentTarget = target;
target = target.left;
}
cur.val = target.val;
(parentTarget.left == target) {
parentTarget.left = target.right;
} {
parentTarget.right = target.right;
}
}
}


