删除二分搜索树中最下节点的非递归实现

来源:1-13 删除二分搜索树的最大元素和最小元素

飞半天的鱼儿

2020-09-07 10:45:56

/**
* 移除二分搜索树中的最小元素(非递归方式)
*/
public E removeMinNR() {

   if (size == 0) {
       throw new IllegalArgumentException("BST is empty");
   }

   Node cur = root;
   Node preCur = null;
   Node rightNode = null;

   while (cur.left != null) {
       preCur = cur;
       cur = cur.left;
       rightNode = cur.right;
   }

   preCur.left = rightNode;
   cur.right = null;

   return cur.e;
}

写回答

3回答

慕UI4021841

2020-09-18

只有一个根节点时,你这是有bug的,处理下

0

慕UI4021841

2020-09-18

// 删除二分搜索树最小值
public E removeMinimum() {

    if (root == null)
        throw new IllegalArgumentException(" BST is empty!");

    if (root.left == null){
        E result = root.e;
        root = root.right;
        return result;
    }

    Node cur = root;
    Node preCur = null;

    while (cur.left != null) {
        preCur = cur;
        cur = cur.left;
    }
    Node right = cur.right;
    preCur.left = right;
    cur.right = null;
    return cur.e;
}


// 删除二分搜索树最大值
public E removeMaxmum() {
    if (root == null)
        throw new IllegalArgumentException(" BST is empty!");

    if (root.right == null){
        E result = root.e;
        root = root.left;
        return result;
    }
    Node cur = root;  
    Node preCur = null; 

    while (cur.right != null) {
        preCur =cur;
        cur = preCur.right;
    }
    Node left = cur.left;
    preCur.right=left;
    cur.left=null;  //gc

    return cur.e;
}


0

liuyubobobo

2020-09-07

感谢分享。继续加油!:)

0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2603 学习 · 1086 问题

查看课程