二分搜索树-删除二叉搜索树中的结点(领扣)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
        if(root==null){
            return null;
        }
        if(key<root.val){
            root.left=deleteNode(root.left,key);
        }else if(key>root.val){
            root.right=deleteNode(root.right,key);
        }else{
            if(root.left==null){
                TreeNode leftNode=root.right;
                root.right=null;
                return leftNode;
            }else if(root.right==null){
                TreeNode rightNode=root.left;
                root.right=null;
                return rightNode;
            }else{
                TreeNode successor=minimum(root.right);
                successor.right=removeMin(root.right);
                successor.left=root.left;
                root.left=root.right=null;
                return successor;
            }
        }
        return root;
    }
    public 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 leftNode=node.right;
            node.right=null;
            return leftNode;
        }
        node.left=removeMin(node.left);
        return node;        
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43283092/article/details/89486698