LeetCode450.删除二叉搜索树中的节点(Java实现)

链接:https://leetcode-cn.com/problems/delete-node-in-a-bst/

class Solution {

    public TreeNode deleteNode(TreeNode root, int key) {

        if(root==null){
            return null;
        }
        if(keyroot.val){
            root.right=deleteNode(root.right,key);
        }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 successor=minimum(root.right);
            successor.right=removeMin(root.right);
            successor.left=root.left;
            root.left=root.right=null;
            return successor;
        }
        return root;
    }
    private TreeNode minimum(TreeNode node) {
        if(node.left==null){
            return node;
        }else{
            return minimum(node.left);
        }
    }
    private TreeNode removeMin(TreeNode node) {
        if(node.left==null){
            TreeNode rightNode=node.right;
            node.right=null;
            return rightNode;
        }
        node.left=removeMin(node.left);
        return node;
    }
}

 

你可能感兴趣的:(LeetCode编程题)