数据结构Java版之二叉查找树(七)
二叉查找树(BST : BInary Search Tree)
二叉查找树的性质:
1.每一个元素有一个键值
2.左子树的键值都小于根节点的键值
3.右子树的键值都大于根节点的键值
4.左右子树都是二叉查找树
二叉查找树查找一个数据的速度非常快,在庞大的数据中,左右来回较少的次数就能找到。下面来做一个二叉查找树。
1.创建一个节点类:
// 树节点
class TreeNode {
public char val;
public TreeNode left;
public TreeNode right;
public TreeNode(char x) {
val = x;
}
}
2.完整代码:
package tree; public class BinaryFindTree {
private TreeNode root;
public BinaryFindTree(TreeNode root) {
this.root = root;
}
//插入节点
public boolean Insert(TreeNode x) {
TreeNode p = root;
TreeNode q = null;
//查找插入的位置
while(p != null) {
q = p;
if(x.val == p.val) {return false;}
if(x.val < p.val) {p = p.left;}
else {p = p.right;}
}
//找到的位置就是q
if(root == null) root = x;
else if (x.val < q.val) q.left = x;
else q.right = x;
return true;
}
//递归查找
public TreeNode Search(TreeNode x) {
return Search(root, x);
}
public TreeNode Search(TreeNode b, TreeNode x) {
if(b == null) return null;
if(x.val == b.val) return b;
if(x.val < b.val) return Search(b.left, x);
return Search(b.right, x);
}
//迭代查找
public TreeNode IterSearch(TreeNode x) {
TreeNode t = root;
while(t != null) {
if(t.val == x.val) return t;
if(x.val < t.val) t = t.left;
else t = t.right;
}
return null;
}
// 树节点
class TreeNode {
public char val;
public TreeNode left;
public TreeNode right;
public TreeNode(char x) {
val = x;
}
}
}
数据结构Java版之二叉查找树(七)的更多相关文章
- 数据结构Java版之交换算法(一)
交换的本质是拷贝,其中拷贝包括两种方式.值拷贝和指针拷贝,在java中没有指针,为此,我们可以理解为地址拷贝,在我看来,指针就是地址. 1.传值方式示例: 由上述示例可得,传值,不能起到交换的作用,原 ...
- java版云笔记(七)之事务管理
事务管理 事务:程序为了保证业务处理的完整性,执行的一条或多条SQL语句. 事务管理:对事务中的SQL语句进行提交或者回滚. 事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的 ...
- 数据结构Java版之广度优先图(十三)
广度优先,则是用的队列,将每一层的节点先存入队列中去,后依次取出队列中的节点,显示与当前节点存在边,但是未被访问过的节点,也就是下一层与之相联系的节点,再将这些节点存入队列.经过层层迭代,就可以完全遍 ...
- 数据结构Java版之深度优先-图(十二)
这里用深度优先遍历存在矩阵里面的图. 深度优先利用的是栈的FIFO特性.为此遍历到底后,可以找到最相邻的节点继续遍历.实现深度优先,还需要在节点加上一个访问标识,来确定该节点是否已经被访问过了. 源码 ...
- 数据结构Java版之邻接矩阵实现图(十一)
邻接矩阵实现图,是用一个矩阵,把矩阵下标作为一个顶点,如果顶点与顶点之间有边.那么在矩阵对应的点上把值设为 1 .(默认是0) package mygraph; import java.util.Li ...
- 数据结构Java版之邻接表实现图(十)
邻接表实现图,实际上是在一个数组里面存放链表,链表存放的是连接当前节点的其他节点. package mygraph; import java.util.ArrayList; import java.u ...
- 数据结构Java版之堆&堆排序(九)
堆分为大顶堆,和小顶堆. 什么是堆? 堆可以看成是一棵二叉树,二叉树的元素是一个数组不断的从左到右轮训放置.如果是大顶堆,则大的数放上面一层,小的数放下面一层.上一层的数,一定大于下一层的数.小顶堆则 ...
- 数据结构Java版之红黑树(八)
红黑树是一种自动平衡的二叉查找树,因为存在红黑规则,所以有效的防止了二叉树退化成了链表,且查找和删除的速度都很快,时间复杂度为log(n). 什么是红黑规则? 1.根节点必须是黑色的. 2.节点颜色要 ...
- 数据结构Java版之遍历二叉树(六)
二叉树是我们在程序中用的最多的一种树(个人观点).最简单的一个二叉树是由一个根节点,两个子节点(一左一右成左右孩子节点)组成.二叉树是数组和链表的结合,即包含了数组的快速查找优点,又包含了链表的快速添 ...
随机推荐
- 【转载】 C#中使用CopyTo方法将List集合元素拷贝到数组Array中
在C#的List集合操作中,有时候需要将List元素对象拷贝存放到对应的数组Array中,此时就可以使用到List集合的CopyTo方法来实现,CopyTo方法是List集合的扩展方法,共有3个重载方 ...
- 聊聊GIS中的坐标系|再版
本文约6500字,建议阅读时间15分钟. 作者:博客园/B站/知乎/csdn/小专栏 @秋意正寒 版权:转载请告知,并在转载文上附上转载声明与原文链接(https://www.cnblogs.com/ ...
- python爬虫 urllib模块url编码处理
案例:爬取使用搜狗根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦'的页面数据) import urllib.request # 1.指定url url = 'https://www.sogou. ...
- datatables 自定义排序
参考:https://datatables.net/examples/plug-ins/sorting_manual $.fn.dataTable.ext.type.order['salary-gra ...
- WinServer-文件共享端口
When turning on Firewall, please assure that “File and Printer Sharing” on current network profile i ...
- mysql 压力测试工具sysbench
2.1 只读示例 ./bin/sysbench --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=1 ...
- XML DOM 知识点
第一部分[DOM基础] DOM介绍: 1.什么是 HTML DOM? HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法(接口). 2.什么是 XML DOM? XML DO ...
- Beta版本冲刺
一.团队成员 团队名称 西柚排课王 项目名称 易奇排排课系统 团队成员 秦傲明 201731062308 韩浩 201731062319 黄青松 201731062322 王越豪 2017310623 ...
- raw镜像与qcw2镜像互相转换
qcow2是最小使用,raw是置零使用 . raw格式是原始镜像,会直接当作一个块设备给虚拟机来使用,至于文件里面的空洞,则是由宿主机的文件系统来管理的,linux下的文件系统可以很好的支持空洞的特性 ...
- Multiple declaration for 'fd_set'
如果程序编译时报 [C++ Error] winsock2.h(109): E2238 Multiple declaration for 'fd_set' 这样的错误,可以尝试在,winsock2.h ...