★[leetCode 450] 删除二叉搜索树中的节点

这篇博客详细介绍了如何使用递归方法在二叉搜索树中删除指定节点。根据节点的不同情况(叶子节点、左空右不空、右空左不空、左右都不空),采取不同的删除策略,并提供了相应的Java代码实现。通过这段代码,读者可以理解二叉搜索树节点删除的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路如下:先找到这个节点,然后删除它。用一个递归来实现,用返回值来实现删除策略
删除它又要分情况:
1. 它是叶子节点,那直接返回null就好
2. 它左边是空,右边不是空,那直接返回右边节点
3. 左边不是空,右边是空,返回左边节点
4. 左右都不是空,那就把左边子节点转移到右子树小的节点的左子结点上,然后返回右子节点。这里右子树最小节点,其实就是右边节点的左下角那个节点。
代码如下:

public TreeNode deleteNode(TreeNode root, int key) {
        if (root==null ) return null;
        //找到这个节点
        if (root.val==key){
            //情况1
            if (root.left==null&&root.right==null) return null;
            //情况2
            if (root.left==null&&root.right!=null) return root.right;
            //情况3
            if (root.right==null&&root.left!=null) return root.left;
            //情况4
            else {
               TreeNode rightNode=root.right;
               TreeNode leftNode=root.left;
               while (rightNode.left!=null) rightNode=rightNode.left;
               rightNode.left=leftNode;
               return root.right;
            }
        }
        if (root.val>key)  root.left=deleteNode(root.left,key);
        if (root.val<key)  root.right=deleteNode(root.right,key);
        
        return root;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值