Java上亿数据查找树_数据结构:JAVA_二叉数查找树基本实现(中)

数据结构:二叉数查找树基本实现(JAVA语言版)

1.写在前面

二叉查找树得以广泛应用的一个重要原因是它能保持键的有序性,因此我们可以把它作为实现有序符号表API中的众多方法的基础。

也就是说我们构建较为完整的二叉查找树API,为以后作为有序符号表提供基础。

二叉查找树是高效的,灵活的。

.....

2.代码分解

2.1 找到最大键和最小键

既然是二叉查找树可以作为一个有序符号表,那么必然要提供获取最大键和最小键的功能。

publicKey min()

{returnmin(root).key;

}privateNode min(Node root)

{if(root.Left==null)  //root.Right==null return 0

return root; //return max(root.Right);

returnmin(root.Left);

}

|说明:

1.简要思路,根据二叉树的结构,我们知道,一个节点左边相连的节点一定是较小的,所以最小节点一定在从根节点开始一直往左走的位置,知道遇到一个节点的左节点是NULL,我们边返回这个左节点。

2.递归的思路也比较简单,最大值的求法与最小值基本相同,注释已经标注。

2.2 向上取整和向下取整

publicKey floor(Key key)

{returnfloor(root,key).key;

}privateNode floor(Node root,Key key)

{if(root==null)return null;int cmp =key.compareTo(root.key);if(cmp==0)returnroot;if(cmp<0)returnfloor(root.Left,key);

Node t=floor(root.Right,key); //每次往右边走我们都需要记录一下,分析看说明if(t!=null)returnt;else

returnroot;

}

|说明:

5977fd78246088d22a587df884ddb208.png

由上图我们来分析一下思路,找G元素,先比较G元素与S元素,很显然G元素

2.3 根据K值选择节点(返回排名为K的键)

public Key select(intk)

{returnselect(root,k).key;

}public Node select(Node x,intk)

{//返回排名为K的节点

if(x==null)return null;int t =size(x.Left);if(t>k)returnselect(x.Left,k);else if (t

returnx;

}

|说明:

9537fd78e50916db6770ebf9df1ef344.png

2.4返回给定键的排名

public intrank(Key k){returnrank(k,root);

}public intrank(Key k,Node x)

{if(x==null)return 0;int cmp=k.compareTo(x.key);if(cmp<0) returnrank(k,x.Left);else if(cmp>0) return 1+rank(k,x.Right)+size(x.Left);else returnsize(x.Left);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值