Portland-Chinese-folks-PoP-leetcode / Leetcode_solution

Fuck leetcode
8 stars 1 forks source link

添加节点到bst只有一种1情况,删除bst的节点有三种情况 #13

Open zyune opened 2 years ago

zyune commented 2 years ago

情况 1:A 恰好是末端节点,两个子节点都为空,那么它可以当场去世了。

if (root.left == null && root.right == null)
    return null;

情况 2:A 只有一个非空子节点,那么它要让这个孩子接替自己的位置。

// 排除了情况 1 之后
if (root.left == null) return root.right;
if (root.right == null) return root.left;

情况 3:A 有两个子节点,麻烦了,为了不破坏 BST 的性质,A 必须找到左子树中最大的那个节点,或者右子树中最小的那个节点来接替自己。我们以第二种方式讲解。

if (root.left != null && root.right != null) {
    // 找到右子树的最小节点
    TreeNode minNode = getMin(root.right);
    // 把 root 改成 minNode
    root.val = minNode.val;
    // 转而去删除 minNode
    root.right = deleteNode(root.right, minNode.val);
}
zyune commented 2 years ago

https://github.com/Portland-Chinese-folks-PoP-leetcode/Leetcode_solution/blob/main/Binary_tree/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91_%E5%9F%BA%E6%93%8D%E7%AF%87/delete-node-in-a-bst.py