代码随想录算法训练营第二十二天 |701.二叉搜索树中的插入操作 , 450.删除二叉搜索树中的节点

701.二叉搜索树中的插入操作
充分利用BST的性质,将需要插入的元素和节点的值进行比较来确定搜索的方向,当一直寻找发现找到的点为空的时候,就可以创建新节点返回
递归三要素:

  1. 返回值: 插好元素的“新“数的root
  2. 截止条件:为null 说明找到了子节点,返回新节点
  3. 单次递归木有逻辑。或者说逻辑就是 将返回的值赋值给left 或者right 。因为直接写在递归函数处,所以算是单层递归里没有逻辑

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

先找到节点,这里分2种情况: 找到 & 未找到节点 然后
3种情况:

  • 需要删除的点是子节点,即左右子节点为空 -> 直接删除
  • 左边有一个子节点 OR 右边有一个子节点 -> 剩下的一个节点代替该节点
  • 左右子树皆有节点 -> 这里有2种方法都可以实现:如图假设我们需要删除“7”
    original tree
  1. 将他的右子树中下一个最小的数(8)直接接上去代替删除节点,之后再把该节点从右节点中删除
    option1
//这里只写了第三种情况的逻辑代码
			
			TreeNode newRoot = root.right;
			//找到需要删除的点的下一个点“8”
            while(newRoot.left != null){
                newRoot = newRoot.left;
            }
            //将8 从一开始右子树中删除
            root.right = deleteNode(root.right,  newRoot.val);
            //把之前的左右子树重新安到新节点上
            newRoot.right = root.right;
            newRoot.left = root.left;
            
            return newRoot;
  1. 把右子树“9”直接接上,7 的左子树(456)直接接到 9 的左边子结点上
    在这里插入图片描述
			//右子树 的根节点9 代替了删除点	
  			TreeNode tmp = root.right;
          //找到删除点的下一个数
            while(tmp.left!= null){
                tmp = tmp.left;
            }
            //将之前的左子树直接插到tmp上
            tmp.left = root.left;
            //返回 9
           return root.right;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值