[Java]二叉树简要解析(持续学习和整理)
来源:互联网 发布:淘宝面交交易被骗 报警 编辑:程序博客网 时间:2024/06/07 22:55
1.TreeSet底层数据结构为二叉树,也叫红黑树,其排序原理为以头一个插入的元素为根节点,每次从根节点起,compareTo方法比较结果为负的放左边,为正的放右边,为0的为重复元素,不插入。结构如图:
发现整体来看,越靠左的枝杈元素“值”越小,左侧末端最小,越靠右的枝杈元素越大,右末端最大。但包含左右两叉的子树整体都比根节点小。
从提高效率的角度,如果每次都从始祖节点查找,则效率低下,一般会取一个折衷值,就是查找子树。子树不符合条件,再层层向上找。
如果是从小到大取,取的顺序:先左叉(最左边末端),先子树(至最右末端再上溯),(递归)查找:
应用:TreeSet按照存的顺序,顺序存储;按照存的顺序,逆序存储------------>将compareTo方法直接return 1或return -1
例子:
Person对象的compareTo方法:
public int compareTo(Object obj) {return 1;}测试程序:
public class TreeSetDemo {public static void main(String[] args) {TreeSet ts = new TreeSet();ts.add(new Person("lisi", 29));ts.add(new Person("lisi", 30));// ts.add(new Person("lisi", 30));ts.add(new Person("lisi", 30));ts.add(new Person("liasi", 29));// ts.add(new Person("liasi", 30));// ts.add(new Person("zhangsan", 30));// ts.add(new Person("zhangsan", 29));System.out.println(ts);}}运行结果:
[lisi...29, lisi...30, lisi...30, liasi...29]--------->注意,不管什么年龄姓名了,统统按存的顺序添加,底层二叉树添加过程如图(数据不一样,仅示意):
如果要求逆序存储,只需将compareTo直接return -1,示意图:
0 0
- [Java]二叉树简要解析(持续学习和整理)
- linux学习资料备份(持续整理)
- Perl语言学习书籍(持续整理)
- Hadoop-Nutch学习整理(持续更新)
- 机器学习资料整理(持续更新)
- python学习简要笔记整理
- Python学习简要笔记整理
- java知识点整理(持续更新)
- JAVA常见基础题(持续整理)
- 【Mybatis学习】Mybatis的解析和运行简要介绍
- java日常学习:事件(简要版)
- 二叉查找树 图文解析 和 Java的实现
- 《 Java中数组简要解析》
- 数据结构学习之二叉树(面试易考题整理)
- 二叉查找树简要实现
- 二叉树整理(二)
- 二叉树整理(三)
- 二叉树整理(四)
- 我的第一个wap端响应式页面
- 多线程并发库高级应用 之 传统定时器、互斥、同步通信技术
- What happened
- 健康_1
- Windows下的指北针(指南针)--OpenGL版 Compass
- [Java]二叉树简要解析(持续学习和整理)
- qt样式表的使用
- 一起学Netty(二)之 Hello Netty的原型图解
- 7.斐波那契数列
- JavaWeb学习笔记——Tomcat服务器部署
- java多线程并发库高级应用 之 线程范围内共享数据
- activiti 根据角色指定执行人(十二)
- java多线程并发库高级应用 之 多个线程之间共享数据的方式探讨
- JavaScript -- 浏览器对象小结