二叉查找树(2)-二叉树-数据结构和算法(Java)
admin
2024-03-04 06:41:15
0

文章目录

    • 1 范围查找keys()
    • 2 性能分析
    • 3 综合测试
    • 4 后记

1 范围查找keys()

既然是范围查找呢,需要遍历整个二叉树,上一篇我们讲解了二叉树遍历,这里我们就需要用到。

以中序遍历为例,范围[lo,hi][lo,hi][lo,hi]算法如下:

  • 遍历二者查找树,如果当前节点lo≤key≤hilo\le key\le hilo≤key≤hi,符合要求

代码如下:

/*** [lo,hi]范围内键的迭代器* @param lo    范围下限* @param hi    范围上限* @return      范围内键的迭代器*/
@Override
public Iterable keys(K lo, K hi) {Queue q = new LinkQueue<>();Stack> l = new Stack<>();Node current = root;while (current != null || !l.isEmpty()) {while (current != null) {l.push(current);current = current.left;}if (!l.isEmpty()) {current = l.pop();if (lo.compareTo(current.key) <= 0 && hi.compareTo(current.key) >= 0) {q.offer(current.key);}current = current.right;}}return q;
}

2 性能分析

二叉查找树中和有序性有关的操作的性能如何?要研究这个问题,我们首先要知道树的高度(任意节点的最大深度或称树的深度)。给定一棵树,树的高度决定了所有操作在最坏的情况下的性能(我们实现的范围查找增长数量级N)

在一棵二叉查找树中,所有操作在最坏情况下所需的时间都和树的高度成正比。

目前位置3中符号表实现成本比较,如下表:

下面看下符号表的初始实现的性能特点,如下表4-1所示:

算法(数据结构)最坏情况下的成本
(N次插入后)
平均情况下的成本
(N次随机插入后)
算法高效的支持有序
性相关的操作
查找插入查找插入
顺序查找(无序链表)NNN/2N
二分查找(有序数组)lgNN+lgNlgNN+lgN
二叉查找树NN1.39lgN1.39lgN

3 综合测试

代码如下:

public class TestBst {public static void main(String[] args) {testBst();}public static void testBst() {BST bst = new BST<>();bst.put(33, "a");bst.put(23, "b");bst.put(82, "c");bst.put(3, "d");bst.put(25, "e");bst.put(70, "f");bst.put(100, "g");System.out.println("初 始:" + bst);Integer key = 3;
//        System.out.println(key + "-" + bst.get(key));
//
//        System.out.println("最大键: " + bst.max());
//        System.out.println("最小键: " + bst.min());
//
//        key = 5;
//        System.out.println(key + " 向上取整:" + bst.ceiling(key));
//        System.out.println( key + " 向下取整:" + bst.floor(key));
//        key = 26;
//        int index = bst.rank(key);
//        System.out.println("rank(" + key + ")=" + index);
//        System.out.println("select(" + index + ")=" + bst.select(index));//        key = 70;
//        System.out.println("删除: " + key + "=" + bst.delete(key));
//        System.out.println("删除后: " + bst);//        System.out.println("删除最小键: " + bst.deleteMin());
//        System.out.println("删除后:" + bst);
//        System.out.println("删除最大键: " + bst.deleteMax());
//        System.out.println("删除后:" + bst);int lo = 0, hi = 80;Iterator iterator = bst.keys(lo, hi).iterator();System.out.println("范围查找:" + lo + "~" + hi);while (iterator.hasNext()) {System.out.print(iterator.next() + " ");}System.out.println();}
}

我目前没测出bug,如果小伙伴有测出bug或者其他可以联系我或者留言。

4 后记

​ 如果小伙伴什么问题或者指教,欢迎交流。

❓QQ:806797785

⭐️源代码仓库地址:https://gitee.com/gaogzhen/algorithm

参考:

[1][美]Robert Sedgewich,[美]Kevin Wayne著;谢路云译.算法:第4版[M].北京:人民邮电出版社,2012.10

相关内容

热门资讯

亲爱的英文是darling还是... 亲爱的英文是darling还是daringdarling英音:['dɑ:liŋ]美音:['dɑrlɪ...
赤壁赋 第一段写景运用了怎样的... 赤壁赋 第一段写景运用了怎样的手法,请简要分析修辞手法:对仗,比喻表达方式:有声衬无声,动静结合,情...
白敬亭可以是暖男也可以是高冷霸... 白敬亭可以是暖男也可以是高冷霸总,你更喜欢哪一款的小白?我认为还是暖男比较好,因为暖男更讨女生喜欢。...
面试失败了后,该如何安慰面试生... 面试失败了后,该如何安慰面试生?其实我们可以给出一定的建议,然后告诉他,应该让他努力的改变自己哪些不...
玩极品飞车18会弹出下面的对话... 玩极品飞车18会弹出下面的对话框,然后游戏就退出了,求大神上面说 要么是你的显卡被移除了(物理上的)...
古文单元应该怎么出题 古文单元应该怎么出题高中:如果有必背古文的话,古文默写一定会考。如果是一般古文的话,通常会考古文翻译...
信蜂漫画讲了啥?! 信蜂漫画讲了啥?!麻烦各位给咱说个明白…… 讲个大概剧透剧透…… 重要的细节什么的…… 一定要给我说...
请问出处 请问出处第二张是 《超次元游戏:海王星》,又名《超次元战记:战机少女》人物是 涅普顿《博丽灵梦》1 ...
怎样看待《最强大脑》中王昱珩的... 怎样看待《最强大脑》中王昱珩的“超能力”?在最强大脑这个节目中,我们可以看到王昱珩,可以说是一个让大...
西藏六天行程规划,和父母游览西... 一直以来,我都盼着能和父母一起去西藏看看。西藏,这片神奇而又充满魅力的土地,就像一颗璀璨的明珠镶嵌在...
34家景区免门票!面对全国中高... 今年暑期 运城市以“免门票”欢迎全国中、高考考生 34家景区同步敞开大门 凭一张准考证,全国中、高...
谁能帮我起个寻仙女生名字啊,我... 谁能帮我起个寻仙女生名字啊,我感激不尽,好听的啊,可爱加成熟的飘渺_菟菟随便在前面或中间加点符号,女...
黄山旅游5天行程表,情侣双飞黄... 黄山旅游5天行程表,情侣双飞黄山五日自由行,别再错过! 家人们,情侣之间是不是都特别渴望一场浪漫又难...
去北京正规私人导游推荐,北京4... 北京,这座古老而又充满活力的城市,是无数人心中的旅游胜地,更是带着爸妈开启一场文化之旅的绝佳选择。它...
《山海情》祖峰出演的白校长真的... 《山海情》祖峰出演的白校长真的太赞了,说说他的演技有多好?祖峰老师演的太棒了,白校长带领孩子们唱春天...
西藏6日游最佳路线,西藏几月份... 嘿,朋友们!西藏,那可是一片神秘而令人向往的土地,宛如一颗镶嵌在世界屋脊上的璀璨明珠。它位于青藏高原...
灵若雪除了写《爱是风中的泡沫》... 灵若雪除了写《爱是风中的泡沫》还有什么小说是她写的?《泡沫之恋》.《爱》
四川6天最佳行程路线攻略必看,... 宝子们,四川,这片充满魅力的土地,宛如一颗镶嵌在祖国西南的璀璨明珠。它有着“天府之国”的美誉,地域广...
袁枚的《题画》的翻译 袁枚的《题画》的翻译村落晚晴天,桃花映水鲜。牧童何处去?牛背一鸥眠。翻译:农村傍晚的天气很好,桃花映...
四川品质服务旅行社电话,四川优... 家人们,暑假到了,是不是正在为去哪儿旅游而发愁呢?那四川绝对是一个绝佳的选择!四川,地处中国西南腹地...