用java源代码学数据结构<七>: BST
/*
* 以int类为例
* 其它的类必须能够比较
* */ //二叉搜索树的节点点
class BSTNode{ int item;
BSTNode lc;
BSTNode rc;
BSTNode p; public BSTNode(int item){
this.item = item;
}
} public class BST{ //BST的根
transient BSTNode root; //树的大小
transient int size = 0; public BST(){
root = null;
} public BST(int rootData){
root = new BSTNode(rootData);
size++;
} //向二叉树搜索树中插入一个节点
private void addNode(BSTNode z){
if (root==null) {
root = z;
return;
}
BSTNode y = null;
BSTNode x = root;
while(x!=null){
//用y来保存x
y = x;
//找到z应该放置的位置
if(z.item < x.item)
x = x.lc;
else
x = x.rc;
}
z.p = y;
//如果y为null表示root为空
if (y==null) {
root = z;
return;
}
else {
//比较y和z,来设置y的lc和rc
if (z.item < y.item)
y.lc = z;
else
y.rc = z;
}
size++; } //找到BST中第一个元素为item的对象,从x节点开始找
private BSTNode findNodeByitem(BSTNode x,int item){
while (x!=null && x.item!=item) {
if (item < x.item)
x = x.lc;
else
x = x.rc;
}
return x;
} private BSTNode minimum(BSTNode x){
if (x==null) {
return null;
}
while (x.lc!=null) {
x = x.lc;
}
return x;
} private BSTNode maximum(BSTNode x){
if (x==null) {
return null;
}
while (x.rc!=null) {
x = x.rc;
}
return x;
}
private void transPlant(BSTNode u,BSTNode v){
if (u.p==null) {
root = v;
}
else {
if (u==u.p.lc) {
u.p.lc = v;
}
else {
u.p.rc = v;
}
}
if (v!=null) {
v.p = u.p;
}
} //删除x节点
private void removeNode(BSTNode z){
if (z==null) {
return;
}
if (z.lc==null) {
transPlant(z, z.rc);
}
else {
if (z.rc==null) {
transPlant(z, z.lc);
}
else {
BSTNode y = minimum(z.rc);
if (y.p!=z) {
transPlant(y, y.rc);
y.rc = z.rc;
y.rc.p = y;
}
transPlant(z, y);
y.lc = z.lc;
y.lc.p = y;
}
}
size--;
} private BSTNode getNodeByitem(int item){
return findNodeByitem(root, item);
} public void addItem(int item){
BSTNode t = new BSTNode(item);
addNode(t);
} public void removeItem(int item){
BSTNode tBstNode = findNodeByitem(root, item);
removeNode(tBstNode);
} public int getMax(){
return maximum(root).item;
} public int getMin(){
return minimum(root).item;
} private void print(BSTNode x){
if (x==null) {
return ;
}
print(x.lc);
System.out.print("["+x.item+"]");
print(x.rc);
} public void printAll(){
if (root==null) {
return;
}
print(root);
} public static void main(String[] args) {
BST bst = new BST();
bst.addItem(15);
bst.addItem(6);
bst.addItem(18);
bst.addItem(3);
bst.addItem(7);
bst.addItem(17); bst.printAll();
System.out.println(); bst.removeItem(6);
bst.printAll();
System.out.println(); bst.removeItem(10);
bst.printAll();
System.out.println(); System.out.println("Max="+bst.getMax());
System.out.println("Min="+bst.getMin());
} }
用java源代码学数据结构<七>: BST的更多相关文章
- 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
20172328 2018-2019<Java软件结构与数据结构>第七周学习总结 概述 Generalization 本周学习了第11章:二叉查找树.在本章中,主要探讨了二叉查找树的概念和 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第七周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第七周学习总结 教材学习内容总结 本周内容主要为书第十一章内容: 二叉查找树(附加属性的二叉树) 二叉查找树是对树中 ...
- 20172306 2018-2019-2 《Java程序设计与数据结构》第七周学习总结
20172306 2018-2019-2 <Java程序设计与数据结构>第七周学习总结 教材学习内容总结 概述 二叉查找树是一种含有附加属性的二叉树,即其左孩子小于父结点,而父结点又小于或 ...
- 20172306 《Java程序设计与数据结构》第七周学习总结
20172306<Java程序设计>第七周学习总结 教材学习内容总结 这一章的标题是继承.主要学习了有关继承的相关知识.其中在这五节中,我学到了以下几点: 1.继承主要表达的是" ...
- 2018-2019-20172329 《Java软件结构与数据结构》第七周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第七周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十一章-二叉查找树 一.概述 1.什么是二 ...
- 2018-2019-20172321 《Java软件结构与数据结构》第七周学习总结
2018-2019-20172321 <Java软件结构与数据结构>第七周学习总结 教材学习内容总结 第11章 二叉查找树 一.概述 二叉查找树是一种含有附加属性的二叉树,该属性即其左孩子 ...
- 201871010128-杨丽霞《面向对象程序设计(java)》第七周学习总
201871010128-杨丽霞-<面向对象程序设计(java)>第七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 20145320 《Java程序设计》第七周学习总结
20145320 <Java程序设计>第七周学习总结 教材学习内容总结 13章 时间与日期 时间的度量: 格林威治标准时间(GMT时间),现已不作为标准时间使用. 世界时(UT),秒的单位 ...
- 20172328 2018-2019《Java软件结构与数据结构》第九周学习总结
20172328 2018-2019<Java软件结构与数据结构>第九周学习总结 概述 Generalization 本周学习了无向图.有向图.带权图.常用的图算法.图的实现策略. 教材学 ...
随机推荐
- window 下 nginx+php+fastcgi 架设备忘
1.配置Php.ini 1)extension_dir = "./ext" 修改这个路径为真实的php的ext路径 2);extension=php_mysql.dll ;exte ...
- hdu5782
官方题解不是很详细 首先有一个结论:若A=pa+sa B=pb+sb A.B串循环同构,则可以构造一个可行方案(pa,sb) (sa,pb)中有一个是最长匹配,这个不难用反证法证明. 对于s1,s2串 ...
- 前端读者 | CSS三角形和饼图
@羯瑞 三角形 .triangle{width:0;height:0;border-width:50px;border-style:solid;border-color:red blue green ...
- OpenStack 认证服务 KeyStone 服务注册(六)
一)检查keystone是否安装配置成功 1.1删除环境变量的配置 unset OS_AUTH_URL redhat 1.2 请求令牌认证 admin用户,请求认证令牌 openstack --os- ...
- Nodejs Bot学习
关于示例部分可以参考<BotFramework Nodejs示例><BotBuilder Nodejs示例查看> Bot Framework Nodejs SDK包括几种与用户 ...
- 【BFS】Pots
[poj3414]Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16925 Accepted: 7168 ...
- 【数论】【枚举】【莫比乌斯反演】【线性筛】bzoj2818 Gcd
思路是hdu6134的简化版,只需要在外面套上一个枚举素数就行了. http://www.cnblogs.com/autsky-jadek/p/7491730.html #include<cst ...
- Problem G: 十进制数转换为二进制数
#include<stdio.h> int main() { ]; while(scanf("%d",&n)!=EOF) { ; ) { a[i++]=n%; ...
- 20172333 2017-2018-2 《Java程序设计》第2周学习总结
20172333 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 1.了解print与println的用法区别. 2.有关于"+"的基本用 ...
- Codeforces Round #344 (Div. 2) D. Messenger kmp
D. Messenger 题目连接: http://www.codeforces.com/contest/631/problem/D Description Each employee of the ...