floor ceil的实现

floor ceil的实现

问题描述:

波波老师好,能麻烦您帮我看一下实现的代码对不对吗

相关代码:


/*
找到比target小的最大值
*/
public E floor(E target) {
return floor(root, target);
}

/**
* 找到node为根节点,值比target小的最大值
* 由于不涉及添加删除,返回值不需要node
*/
private E floor(Node node, E target) {
//递归到底基本问题
if (node == null) {
//没有找到比target小的值
return null;
}
//递归
if (target.compareTo(node.e) <= 0) {
return floor(node.left, target);
} else {
//node是比target小的节点,但可能不是最大的,如果存在右节点说明不是要找的
if (node.right == null) {
return node.e;
}else {
//判断node的右节点是不是也小于目标值
//如果右节点大于目标值,由于node的右子树都要大于node,所以node就是小于目标的最大值
if (node.right.e.compareTo(target) < 0) {
return floor(node.right, target);
} else {
return node.e;
}
}
}
}

//找到比target大的最小值
public E ceil(E target) {
return ceil(root, target);
}
//递归实现找到node为根节点,值比target大的最小值
private E ceil(Node node, E target) {
if (node == null) {
return null;
}

if (node.e.compareTo(target) <= 0) {
//如果节点值比target小,说明要往更大的右边找
return ceil(node.right, target);
}else{
//节点值大于target,node可能是,还需要判断node的左子树有没有比node小的
if (node.left == null) {
return node.e;
} else {
//node存在左子树,如果左子树也大于目标,递归,否则返回Node
if (node.left.e.compareTo(target) > 0) {
return ceil(node.left, target);
} else {
return node.e;
}
}
}
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答
  • 宇宇子 提问者 #1

    谢谢老师,我看看理解一下

    2021-08-10 22:13:47
  • public E floor(E e) {
        if (getSize() == 0 || e.compareTo(minimum()) < 0) {
            return null;
        }
        return floor(root, e).e;
    }
    
    private Node floor(Node cur, E e) {
        if (cur.e.compareTo(e) <= 0) {
            if (cur.right == null || cur.right.e.compareTo(e) > 0) {
                return cur;
            }
            return floor(cur.right, e);
        }
        return floor(cur.left, e);
    }


    2024-01-21 23:27:24
假蛙工程师 2021-12-05 10:17:02

floor和ceil的非递归实现

// 查找<=e的最大值
public E floor(E e){

    E ret = null;
    Node cur = root;
    while(cur != null){
        if(e.compareTo(cur.e) < 0) {
            cur = cur.left;
        }else if(e.compareTo(cur.e) >= 0){
            ret = cur.e;
            cur = cur.right;
        }
    }
    return ret;

}

// 查找二分搜索树中>=e的最小值
public E ceil(E e){
    E ret = null;
    Node cur = root;
    while(cur != null){
        if(e.compareTo(cur.e) <= 0){
            ret = cur.e;
            cur = cur.left;
        }else{
            cur = cur.right;
        }
    }
    return ret;
}


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2627    人
  • 解答问题       1105    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师