二分搜索树的floor跟ceil实现,老师看一下对不对

二分搜索树的floor跟ceil实现,老师看一下对不对

# 具体遇到的问题

# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

public E floor(E e){
   return floor(root,e).data;
}
private Node floor(Node node,E e){
   if (node.data.compareTo(e)<0){
       node=floor(node.right,e);
   }else if(node.data.compareTo(e)>0){
       node=floor(node.left,e);
   }else{
       return node.left;
   }
   return node;
}
public E ceil(E e){
  return ceil(root,e).data;
}
private Node ceil(Node node,E e){
   if (node.data.compareTo(e)<0){
       node=ceil(node.right,e);
   }else if(node.data.compareTo(e)>0){
       node=ceil(node.left,e);
   }else{
       return node.right;
   }
   return node;
}

正在回答

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

1回答

不正确。


对于包含有 1 3 5 7 9 五个节点的 BST,

0 1 2 3 4 5 6 7 8 9 10 所对应的 floor 值应该是:null 1 1 3 3 5 5 7 7 9 9

0 1 2 3 4 5 6 7 8 9 10 所对应的 ceil 值应该是:1 1 3 3 5 5 7 7 9 9 null


整体测试方式和之前我们学习二分搜素测试 floor 和 ceil 的方式是一致的。你可以据此再自己涉及其他的测试用例。


对于这是我给出的测试代码(你的代码会报空指针异常):

  1. public static void main(String[] args) {
    
        BST<Integer> bst = new BST<>();
        for(int i = 1; i < 10; i += 2)
            bst.add(i);
     
        System.out.print("floor : ");
        for(int i = 0; i <= 10; i ++)
            System.out.print(bst.floor(i) + " ");
        System.out.println();
        
        System.out.print("ceil  : ");
        for(int i = 0; i <= 10; i ++)
            System.out.print(bst.ceil(i) + " ");
        System.out.println();
    }



对于 BST 中求解 floor 和 ceil,我的参考代码见这里:https://git.imooc.com/class-105/Play-Algorithms-and-Data-Structures/src/master/15-Binary-Search-Tree/Optional-01-Floor-and-Ceil-in-BST/src/BST.java (316 行 - 407 行)


其中的逻辑我添加了必要的注释。


继续加油!:)


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

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

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

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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