[Java]二叉树简要解析(持续学习和整理)
2016-05-03 19:24
543 查看
1.TreeSet底层数据结构为二叉树,也叫红黑树,其排序原理为以头一个插入的元素为根节点,每次从根节点起,compareTo方法比较结果为负的放左边,为正的放右边,为0的为重复元素,不插入。结构如图:
发现整体来看,越靠左的枝杈元素“值”越小,左侧末端最小,越靠右的枝杈元素越大,右末端最大。但包含左右两叉的子树整体都比根节点小。
从提高效率的角度,如果每次都从始祖节点查找,则效率低下,一般会取一个折衷值,就是查找子树。子树不符合条件,再层层向上找。
如果是从小到大取,取的顺序:先左叉(最左边末端),先子树(至最右末端再上溯),(递归)查找:
应用:TreeSet按照存的顺序,顺序存储;按照存的顺序,逆序存储------------>将compareTo方法直接return 1或return -1
例子:
Person对象的compareTo方法:
[lisi...29, lisi...30, lisi...30, liasi...29]--------->注意,不管什么年龄姓名了,统统按存的顺序添加,底层二叉树添加过程如图(数据不一样,仅示意):
如果要求逆序存储,只需将compareTo直接return -1,示意图:
发现整体来看,越靠左的枝杈元素“值”越小,左侧末端最小,越靠右的枝杈元素越大,右末端最大。但包含左右两叉的子树整体都比根节点小。
从提高效率的角度,如果每次都从始祖节点查找,则效率低下,一般会取一个折衷值,就是查找子树。子树不符合条件,再层层向上找。
如果是从小到大取,取的顺序:先左叉(最左边末端),先子树(至最右末端再上溯),(递归)查找:
应用: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,示意图:
相关文章推荐
- 举例说明一个 java程序的加载,初始化以及运行过程
- java多线程并发库高级应用 之 多个线程之间共享数据的方式探讨
- java多线程并发库高级应用 之 其它同步工具类
- java多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- java多线程并发库高级应用 之 线程范围内共享数据
- 6.jdk命令行工具
- 1.深入理解java集合List
- 《java入门第一季》二维数组三个案例详解
- 《java入门第一季》二维数组三个案例详解
- 将一个字符串中的空格替换为“%20”(java)
- 一句话说说java设计模式
- Java:内部类
- Java String.split() 转义字符
- Eclipse内存分析工具的用法
- JDeodorant 的使用
- Java 反射基础(下)
- java-计算几何图形的面积(抽象类)
- Spring MVC源码解析
- Lombok在Eclipse/MyEclipse/STS中的安装及使用
- Java学习-21天