每日一题:LeetCode之删除二叉搜索树的节点(迭代法)

本篇博客探讨如何在保持二叉搜索树性质不变的情况下,通过迭代法删除指定值的节点。给出的示例中,删除节点3后,调整后的树为[5,2,6,null,4,null,7]。核心策略包括:当节点无子树时直接删除,有一子树则子树替换,有两子树则用左子树最大值或右子树最小值替换。" 78189136,5708610,使用Xshell通过ZModem在Linux中上传文件,"['Linux', '文件管理', 'Xshell', '命令行工具', '文件传输']
摘要由CSDN通过智能技术生成

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。

一般来说,删除节点可分为两个步骤:

首先找到需要删除的节点;
如果找到了,删除它。
说明: 要求算法时间复杂度为 O(h),h 为树的高度。

root = [5,3,6,2,4,null,7]
key = 3

  5
  /\
 3  6
/ \  \
2 4   7

调整后的为 [5,2,6,null,4,null,7]。

  5
 / \ 
2   6
 \   \ 
  4   7

思路:使用迭代法进行节点的删除,首先遍历整个树,找到要删除的节点。
1.当前节点没有左右子树,直接删除
2.当前节点有一个子树,将子树替换到当前位置
3.当前节点有两个子树,有两种方法,将左子树中最大值替换当前节点或者右子树中最小的节点替换当前节点。

public TreeNode deleteNode(TreeNode root, int key) {
   

        TreeNode cur=root;
        TreeNode par=root;
        boolean isleft=true;
        if(root==null)
            return root;
        while(cur.val!=key){
       //寻找删除的节点
            if(cur.val<key){
   
                par
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值