zoukankan      html  css  js  c++  java
  • LeetCode450. 删除二叉搜索树中的节点

    ☆☆☆思路:二叉搜索树的删除操作是最难的。。。

    class Solution {
        public TreeNode deleteNode(TreeNode root, int key) {
            /**
             *  知识点:
             *    1. BST的递归模板
             *    2. BST删除某个节点,可以将其替换为左子树的最右节点 或者 右子树的最左节点
             *    3. 删除BST中最小的节点
             */
            if (root == null) return null;
            if (key < root.val) {
                // 待删除节点在左子树中
                root.left = deleteNode(root.left, key);
                return root;
            }else if (key > root.val) {
                // 待删除节点在右子树中
                root.right = deleteNode(root.right, key);
                return root;
            }else { // key = root.val,root 为待删除节点
                if (root.left == null) {
                    return root.right;
                }else if (root.right == null) {
                    return root.left;
                }else { // 左右子树都存在,返回后继节点(右子树最左叶子)作为新的根
                    TreeNode mostLeft = min(root.right);
                    // 以下两行顺序不能颠倒,否则会出现环路 "mostLeft.right = mostLeft"
                    mostLeft.right = deleteMin(root.right);
                    mostLeft.left = root.left;
                    return mostLeft;
                }
            }
        }
        private TreeNode min(TreeNode root) {
            if (root.left == null) {
                return root;
            }
            return min(root.left);
        }
        // 删除BST中最小的节点
        private TreeNode deleteMin(TreeNode root) {
            if (root.left == null) {
                return root.right;
            }
            root.left = deleteMin(root.left);
            return root;
        }
    }
  • 相关阅读:
    【洛谷P1119】灾后重建
    【洛谷P1462】通往奥格瑞玛的道路
    【洛谷P1991】无线通讯网
    poj 2892(二分+树状数组)
    hdu 1541(树状数组)
    hdu 5059(模拟)
    hdu 5056(尺取法思路题)
    poj 2100(尺取法)
    hdu 2739(尺取法)
    poj 3320(尺取法)
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14189498.html
Copyright © 2011-2022 走看看