递归实现--查找二叉树删除

在通过非递归方式实现查找二叉树的删除后,感觉递归实现查找二叉树非常高大上,体会到递归的优势。

public TreeNode2 findMin(TreeNode2 node){    //找到最小查找二叉树中值最小的节点
       if(node == null){
           return null;
       }
       else {
           while(node.leftChild != null){
               node = node.leftChild;
           }
       }
       return node;
   }
    public int compareTo(int a, int b){     //比较函数
        if(a < b)
            return -1;
        else if(a > b)
            return 1;
        else
            return 0;
    }
   public TreeNode2 remove(int x, TreeNode2 t){
        if(t == null)
            return t;
        int compareResult = compareTo(x,t.data);   //比较输入值与当前节点的值

        if(compareResult < 0)
            t.leftChild = remove(x,t.leftChild);     //输入值小于当前data,往左递归
        else if(compareResult > 0)
            t.rightChild = remove(x,t.rightChild);    //输入值大于当前data,往右递归
        else if(t.leftChild != null && t.rightChild != null){      //输入值与data相等,即找到要删除的节点,此时要删除的节点同时包含左儿子和右儿子
            t.data = findMin(t.rightChild).data;    //遍历待删除节点的右子树,找到最小值,替换待删除节点的数据值
            t.rightChild = remove(t.data,t.rightChild);   //递归删除找到的最小值的节点
        }
        else        //在待删除节点最多含有一个子节点时
            t = (t.leftChild != null) ? t.leftChild : t.rightChild;      
        return t;
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值