二叉树算法删除代码实现

这篇博客主要探讨了二叉查找树的删除算法,提供了详细的代码实现过程,旨在帮助读者理解如何在二叉查找树中有效地删除节点。如果有任何疑问或需要进一步讨论,欢迎在评论区留言。

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

此代码仅供参考,如有疑问欢迎评论:


二叉树的删除操作比较复杂,主要分三种情况:1、删除没有子节点的节点,2、删除只有一个节点的节点(其中有分为两种情况),3、删除有两个节点的节点。

在讲解之前我先把查找的代码附上,以为删除过程需要用到这段儿查找的代码:
      public  TreeNode search(  int  key) {
          TreeNode pNode =  root ;
            while  (pNode !=  null ) {
                if  (key == pNode.  key ) {
                     return  pNode;
              }  else  if  (key > pNode.  key ) {
                   pNode = pNode.  rchild ;
              }  else  if  (key < pNode.  key ) {
                   pNode = pNode.  lchild ;
              }
          }
            return  null ;  // 如果没有搜索到结果那么就只能返回空值了
     }

首先看第一种情况:(删除没有子节点的节点)
      删除没有子节点的节点只需要将被删除节点的父节点指向空即可
            if (pNode.  lchild  ==  null  && pNode.  rchild  ==  null ) {
                if (pNode ==  root ) {   //如果是根节点,那么就删除整棵树
                     root  =  null ;
              }  else  if (pNode == pNode.  parent .  lchild ){
                     //如果这个节点是父节点的左节点,则将父节点的左节点设为空
                   pNode.  parent .  lchild  =  null ;
              }  else  if (pNode == pNode.  parent .  rchild ) {
                     //如果这个节点是父节点的右节点,则将父节点的右节点设为空
                   pNode.  parent .  rchild  =  null ;
              }
          }

第二种情况:(删除只有一个子节点的节点)
      删除有一个子节点的节点,只需要将被删除节点的父节点指向删除节点的子节点即可
           //第二种情况: (删除有一个子节点的节点)
            //如果要删除的节点只有右节点
            if (pNode.  lchild  ==  null  && pNode.  rchild  !=  null ) {
                if (pNode ==  root ) {
                     root  = pNode.  rchild ;
              }  else  if (pNode == pNode.  parent .  lchild
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值