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)
在二叉搜索树的插入和删除运算中,采用平衡树的优点是:使树的结构较好,从而提高查找运算的速度。缺点是:是插入和删除运算变得复杂化,从而降低了他们的运算速度。对二叉搜索树删除节点而引起的不平衡性进行的操作比插入节点的情况要复杂。