文章目录
数据结构:集合、线性表(栈和队列)、树、图
1-概念
1.1什么是树?
线性结构:如数组和链表
非线性结构:树是典型例子,不再是一对一,而是一对多(图则是多对多)
注意:树的定义是一个递归定义,树的定义中又用到了树的概念。
1.2树的术语
空树、子树
根结点、父结点、孩子结点、叶子结点
结点的度:子树个数
树的度:最大的结点的度
结点的层级:根为第一层
结点的深度:从跟到结点的唯一路径的长,根的深度为0
结点的高度:从结点到一片树叶的最长路径的长,树叶的高为0
性质:如果一棵树有n个结点,那么它有n - 1条边。
注:每一条边必定是某一结点的入度。除了根结点,每个结点有唯一的入边。(即除根结点,1结点对应1入边)
temp
如果一棵树有n个结点,那么它有n - 1条边。(为什么呢?)
度
证明pf:(偏数学)
每一条边必定是某一个结点的入度;
除了根结点,每个结点
物理结构:数组、链表
科学计算:矩阵、计算、迭代
1.3树的实现(树的转化)

一个结点:最多有两个子结点,并且每一个结点的子结点,是有严格的左右划分。
链表:
Node{
value;
left;
right;
}
数组:一维数组就可以存储一个二叉树
2-二叉树
2.1特殊的二叉树

2.2二叉树的特点
若干推论(考研408)
重点
如果对一颗有n个结点的完全二叉树的结点按层序从1开始编号,则对任意一结点有:
如果编号i为1,则该结点是二叉树的根;
如果编号i > 1,则其双亲结点编号为 parent(i) = i/2,
若 2i > n 则该结点没有左孩子,否则其左孩子的编号为 2i,
若 2i + 1 > n 则该结点没有右孩子,否则其右孩子的编号为 2i + 1。
二叉树:严格的左右划分
2.3二叉树的遍历
DFS深度优先遍历(限定先左后右,先中后序3种)
BFS广度优先遍历(层次遍历)

2.4二叉树的建树
已知某二叉树的先序遍历为 ABDECFG,中序遍历为 DBEAFGC,试求它的后序遍历
3-二叉排序树(二叉搜索树、二叉查找树)
实现一个集合类:数据容器
数据角度:二叉搜索树
底层:链表(两个方向延伸)
普通树?没有意义
二叉树?没有意义
二叉搜索树?
二叉树----->二叉搜索树---->自平衡二叉搜索树
红黑树:极其类似自平衡二叉搜索树,但是要复杂的多(了解)
左子树中所有结点的key比根结点的key小,并且左子树也是二叉搜索树
右子树中所有结点的key比根结点的key大,并且右子树也是二叉搜索树
二叉搜索树:要添加到二叉搜索树中的元素要比较大小
要实现如下api
添加、删除、查找、没有替换(集合类中很少有,不应该有替换)
前序遍历、中序遍历、后序遍历(递归和栈2种方式)
二叉搜索树
自平衡的:(平衡二叉树)
所有实现了Compareble接口的方法,都是自然排序方法
比较大返回值是大于,代表大于;负值,代表小于;0,代表等于。
平衡二叉树
哈弗曼树
B树、B+树
红黑树
非常非常非常特殊的二叉树!!!(链表)