结点:是数据结构中的基础,构成复杂数据结构的基本组成单位
树:是n(n>=0)个结点的有限集;n=0,称为空树
1、有且仅有一个特定的称为根节点
2、当n>1时,其余节点可分为m个互不相交的有限集
定义树的时候:
1、根节点唯一
2、子树的个数没有限制,但一定互不相交
树的定义中,使用了递归方式
结点的度:
结点拥有子节点的数量
结点关系:
结点是父子关系、孩子结点,父结点
结点层次
树的深度:
树中的结点最大层数
n个结点的有限集合,如果·n=0,那就称为空二叉树。
二叉树特点:
1、每个节点最多只有2个子树,不存在度大于2的情况;
2、左子树和右子树有顺序且不能颠倒
3、即使树中某个节点只有一颗子树,也要区分是左子树和右子树。
1、在二叉树中第i层最多有2^(i-1)个结点。
2、二叉树中,如果深度为k,那么最多有2^k-1个结点。
3、n0=n2+1.n0表示度数为0的节点,n2表示度数为二的节点
4、完全二叉树中,具有n个结点的完全二叉树的深度为[log2n]+1;
其中[log2n]是向下取整。
5、若对含有n个结点的完全二叉树从上到下且从左到右进行1——n的编号,则对完全二叉树中任意一个编号为i的节点有如下特性:
若i=1,则该节点是二叉树的根,无父结点,否则,编号为i/2的节点为父结点
若2i>n,则该结点无左孩子节点,否则,编号为2i的结点为左孩子节点
若2i+1>n,则该结点无右孩子结点,否则,编号为2i+1的结点为右孩子结点
斜树:
所有的节点都只有左子树的二叉树叫左斜树,只有右子树的二叉树叫右斜树
在一棵二叉树中,如果所有的分支节点都存在左子树和右子树,则称为满二叉树
1、叶子只能出现在下一层。
2、非叶子结点的度一定是2
3、在同样深度的二叉树中,满二叉树的结点个数最多,叶子树也最多
对一颗具有n个结点的二叉树,按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中i结点的位置相同,就称为完全二叉树。
1、顺序存储
使用一堆数组存储二叉树中的结点,并且节点的储存位置,就是数组索引下标
当二叉树为完全二叉树时,节点刚好填满数组
如果不是完全二叉树,采用顺序存储,顺序存储结构中已经出现了结构浪费
顺序存储只适用于完全二叉树
2、二叉链表
二叉树每个节点都有两个孩子
可以将节点数据结构定义成一个数据和两个指针域
二叉树遍历:重点考察
二叉树的遍历从根节点出发,按照某种次数依次访问二叉树中所有节点每个节点仅被访问一次
访问次序分为四种:
递归遍历
自上而下,自左而右,每个节点走三次
前序遍历:
从根节点出发按照先左后右的方向访问
中序遍历:
从根节点出发,先向左再根后向右访问
后序遍历:先左后右再看根。
层次遍历:
按照树的层次自上而下遍历二叉树。
1、二叉查找树
若左子树不为空,左子树所有值小于根节点的值
若右子树不为空,右子树所有值大于根节点的值
左右子树也是一个二叉查找树
没有键值相等的点
2、平衡二叉树(AVL树)
2.1 含有相同结点的二叉树的不同形态,找出一个查找平均长度最小的一颗二叉查找树
2.2 要么是空树,要么根节点左右子树深度差值不超过1
2.3 左右子树都是平衡二叉树
2.4 二叉树结点的平衡因子定义为该结点左子树深度减去右子树深度
平衡因子=左深—右深—101
3、红黑树
自平衡的二叉树,增加了颜色属性
3.1 只能是黑色或红色
3.2 红黑树中,所有叶子节点后面再装上左右两个空节点保持算法一致
3.3 根节点黑色,其他黑色或红色
3.4 在任意子树中,由上到下走到空节点的黑色节点数一样
4、B—树
是一种平衡多路查找树
(1).m阶B—树每个子节点至多m棵子树
(2).若根节点不是叶子节点,则至少有2棵子树
(3).除根节点外所有非终端节点至少有[m/2]棵子树
(4).每个节点的信息结构(A0、K1、A1、K2、······Kn、An),其中n表示关键字的个数,A是指针
所有叶子节点都出现在同一个层次,且不带任何信息。
5、B+树
B—树和B+树后续数据库阶段才会重点用。
集合:容器,存放数据的一个容器
Collection
List
Set
Map<K,V>:存放对值的最大父接口
映射,用于保存具有映射关系的数据,Map保存的两组数据:key和value。key和value都可以是任意类型的引用数据类型,key不能重复
List:数据是有顺序(添加的先后顺序)的,数据可以重复
ArrayList:内部结构是数组。比较适合高效率的查找遍历
LinkedList:双向链表。比较适合高频率的新增删除
1、Collection和Map的区别?
Collection存放单值,Map存放对值,都是最大父接口。
2、ArrayList和LinkedList的区别?
ArrayList:内部结构是数组。比较适合高效率的查找遍历。 LinkedList:双向链表。比较适合高频率的新增删除
3、ArrayList和Vector的区别?
几乎一摸一样,ArrayList线程异步,不安全;Vector线程同步,安全
List:有顺序,元素可以重复,添加的先后顺序
Set:无顺序,元素不可以重复,添加的先后顺序
Set集合有顺序,内部算法排序,
Set集合如何确保数据的不重复。保证数据类型的类要重写hashCode·和equals方法。
TreeSet:
compareTo返回值代表int代表排序结果
负数-1,比较的两个值调用者小
0,两个值相等
1,比较的两个值调用者大
List和Set的区别·?
List:有顺序,元素可以重复,Set:无顺序,元素不可以重复,
LinkedHashSet和·HashSet区别和联系:
比较接口:
Comparable接口:自然排序,规则固定
Comparator接口:临时排序
1、存储对值的K--V
2、key不能重复,value可以重复
3、没有顺序(添加的先后顺序)
1.7之后:链表+数组+红黑树
1、for循环
2、foreach语句
3、迭代器
1、for循环:
2、增强for循环
3、增强for循环
Set<Map.Entry<String,String>> entries = map.entryest();
迭代中删除元素
推荐使用迭代器
1、LinkedHashMap,在HashMap基础上维护了一个双向链表
面试题:线程安全问题
1、如何创建需要的集合,多态
2、主要用到的List和Map
3、各种区别
4、各种集合API的调用
5、两个比较接口
6、各种集合特点,从接口层面到实现类层面
7、重点集合的内部结构
8、各种集合的遍历
9、并发问题
ArrayList、HashMap
1、synchronize原理
2、ReentrantLock原理
3、ArrayList原理
4、LinkedList原理
5、HashMap原理
6、HashSet原理
这两天学习了集合和树;学到的理论知识很多,要掌握的也很多,感觉后面的知识越来越难了,要加倍努力,跟上进度。