450. 刪除二叉搜索樹中的節(jié)點(diǎn)

//    3種情況,
//            1.如果待刪除節(jié)點(diǎn)沒有子節(jié)點(diǎn), 則直接刪除此節(jié)點(diǎn);
//            2.如果有一個(gè)子節(jié)點(diǎn),則這個(gè)子節(jié)點(diǎn)頂替當(dāng)前節(jié)點(diǎn);
//            3.如果有兩個(gè)子節(jié)點(diǎn),則取右子樹的最小節(jié)點(diǎn)(或左子樹最大節(jié)點(diǎn))移到代替此節(jié)點(diǎn)
    public TreeNode deleteNode(TreeNode root, int key) {
        if (root == null) {
            return null;
        }
        if (key > root.val) {
            root.right = deleteNode(root.right, key);
            return root;
        } else if (key < root.val) {
            root.left = deleteNode(root.left, key);
            return root;
        } else {
            if (root.left == null) {
                TreeNode rightNode = root.right;
                root.right = null;
                return rightNode;
            }
            if (root.right == null) {
                TreeNode leftNode = root.left;
                root.left = null;
                return leftNode;
            }
            TreeNode rMin = minNode(root.right);
            rMin.right = removeMin(root.right);
            rMin.left = root.left;
            root.left = null;
            root.right = null;
            return rMin;
        }
    }

    public TreeNode minNode(TreeNode root) {
        while (root.left != null) {
            root = root.left;
        }
        return root;
    }

    public TreeNode removeMin(TreeNode root) {
        if (root.left == null) {
            TreeNode rightNode = root.right;
            root.right = null;
            return rightNode;
        }
        root.left = removeMin(root.left);
        return root;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容