[Java]二叉树简要解析(持续学习和整理)

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,示意图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值