目录
一、二叉树
1、二叉树概述
在树结构中,每一个元素称之为:节点;在二叉树中,每一个节点的子节点称之为度,二叉树的度小于等于2;
2、 二叉查找树
二叉查找树,又称二叉排序树或二叉搜索树;
- 每一个节点上最多有两个子节点
- 左子树上所有节点的值都小于根节点的值
- 右子树上所有节点的值都大于根节点的值
二叉查找树添节点规则:小的存左边,大的存右边,一样的不存;
3、平衡二叉树
1、平衡二叉树规则
- 二叉树左右两个子树的高度差不超过1
- 任意节点的左右两个子树都是一颗平衡二叉树
2、平衡二叉树-左旋
- 触发时机:当添加一个节点之后,该树不再是一颗平衡二叉树
- 逆时针旋转
- 右子节点变成父节点(根节点)
- 原先的根节点降级变成左子节点
- 将多余的左子节点出让,给降级的节点作为右子节点
3、平衡二叉树-右旋
- 触发时机:当添加一个节点之后,该树不再是一颗平衡二叉树
- 顺时针旋转
- 左子节点变成父节点(根节点)
- 原先的根节点降级变成右子节点
- 将多余的右子节点出让,给降级的节点作为左子节点
二、红黑树
1、红黑树概述
- 平衡二叉B树
- 每一个节点可以是红或者黑
- 红黑树不是高度平衡的,它的平衡是通过“自己的红黑规则"进行实现的
2、红黑规则
红黑树不是高度平衡的,它的平衡是通过"红黑规则"进行实现的
- 每一个节点或是红色的,或者是黑色的 ;
- 根节点必须是黑色;
- 如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的;
- 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况);
- 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;
1、添加节点
- 添加的节点的颜色,可以是红色的,也可以是黑色的
- 红色效率高
三、哈希值
- public int hashCode():返回对象的哈希码值
- 同一个对象多次调用hashCode()方法返回的哈希值是相同的
- 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
package com.gkl.test;
import com.gkl.service.TranslateTool;
public class MainTest {
public static void main(String[] args) {
TranslateTool translateTool=new TranslateTool();
TranslateTool translateToolSecond=new TranslateTool();
//多次调用同一对象的hashCode()方法的哈希值是一样的
System.out.println(translateTool.hashCode());
System.out.println(translateTool.hashCode());
//调用不同对象的hashCode()方法的哈希值是不一样的
System.out.println(translateToolSecond.hashCode());
}
}