LeetCode——450.删除二叉搜索树中的节点

通过万岁!!!

  • 题目:给你一个线索二叉树,然后找到其中等于key的节点,将其删除,然后使得删除之后还是满足线索二叉树的特性。并且返回这个二叉树的根节点。
  • 思路:这个题找到这个节点是简单的,但是主要是删除,其实删除以后,这个节点本身有两个子树,这两个子树怎么合并是一个问题。因为左子树一定是小于右子树的,所以我们可以让左子树直接放在右子树的最左侧叶子节点的左子树上。其实还有特殊情况,如果这个节点没有左子树,那么直接返回右子树。同理,没有右子树,直接返回左子树。
  • 技巧:深度优先遍历,这里还需要注意搜索二叉树的特性

java代码

class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
        // 找到这个节点其实不难,相对难的是,如何合并这个剩下的树
        if (root == null) return null;
        if (root.val > key) {// 去左边
            root.left = deleteNode(root.left, key);// 有可能在下面处理,所以这里直接返回到左树上
            return root;
        }
        if (root.val < key) {// 去右边
            root.right = deleteNode(root.right, key);
            return root;
        }
        // 删除root节点
        if (root.left == null) return root.right;
        if (root.right == null) return root.left;
        // 这时候,我们把所有的左边都挂到右子树的最左边
        TreeNode temp = root.right;
        while (temp.left != null) {
            temp = temp.left;
        }
        temp.left = root.left;
        return root.right;
    }
}
  • 总结:题目中也跟我们说了,一共分为两步,第一步就是找到,第二步就是删除,删除的时候需要进行合并,这里直接将其放在了右子树左边,或者是将右子树放在左子树的右边也行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值