1.二叉搜索樹(Binary Search Tree)
leetcode450.刪除BST的結點
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) return null;
if (key < root.val) {
root.left = deleteNode(root.left, key);
return root;
}//刪除的節點在左子樹中
if (key > root.val) {
root.right = deleteNode(root.right, key);
return root;
}//刪除的節點在右子樹中
assert key == root.val;
if (root.left == null) return root.right;
if (root.right == null) return root.left;
TreeNode predecessor = maximum(root.left);
TreeNode predecessorCopy = new TreeNode(predecessor.val);
predecessorCopy.left = removeMax(root.left);
predecessorCopy.right = root.right;
root.left = root.right = null;
return predecessorCopy;
}
private TreeNode removeMax(TreeNode node) {
if (node.right == null) return node.left;
node.right = removeMax(node.right);
return node;
}
private TreeNode maximum(TreeNode node) {
if (node.right == null) return node;
return maximum(node.right);
}
}
2.二叉平衡樹(Adelson-Velskiitree)
在二叉搜索樹的插入和刪除運算中,採用平衡樹的優點是:使樹的結構較好,從而提高查找運算的速度。缺點是:是插入和刪除運算變得複雜化,從而降低了他們的運算速度。對二叉搜索樹刪除節點而引起的不平衡性進行的操作比插入節點的情況要複雜。