2019-10-07这几天状态裂开了

1.Java集合,也可称容器?
一些逻辑关系
Interable、Collection、Interator、ArrayList、LinkedList、Vector、Set、HashSet、SortedSet、TreeSet、Map、HashMap、HashTable、Properties、SortedMap、TreeMap

2019-10-07这几天状态裂开了_第1张图片
QQ截图20191004175208.jpg

Java基础之Collection和Map
2.树
定义:Tree Root SubTree
是n个结点的有限集
结点的分类:叶节点(Leaf)或终端结点/非终端节点或分支结点
分支结点=根结点+内部结点
结点子树的根节点称为该结点的孩子
某结点在i层,其子树的根在i+1层
树中结点的最大层次数称为树的深度
如果将树中结点的各子树堪称从左到右是有次序的,不能互换,则称该树为有序树
森林:m棵互不相交的树的集合
树的存储结构
双亲表示法
一组连续空间存储树的结点,同时每个结点中,附设一个指示器指示其双亲结点到链表中的位置。

typedef struct PTNode{
    int data;
    int parent;
}PTNode;
typedef struct{
    PTNode nodes[999];
    int r,n;
}PTree;

如果结点的孩子很多,超过两个。我们又关注结点的双亲、又关注孩子、还关注结点的兄弟
双亲域、长子域、右兄弟域

孩子表示法
每个结点有多个指针域,每个指针指向一个字树的根节点,我们把这种方法叫做多重链表表示法。
一种是指针域的个数就等于树的高度
二种每个结点指针域的个数等于该结点的度
三种把每个结点的孩子排列起来,以单链表作为存储结构,然后头指针又组成一个线性表,采用顺序存储方式。

双亲孩子表示法

孩子兄弟表示法
设置两个指针分别指向结点的第一个孩子和此结点的右兄弟

3.二叉树
定义
特点:最多2子树/有序树/子树区分左右
二叉树五种形态
特殊二叉树:
斜树/满二叉树(所有分支结点都有左右孩子且叶子节点都在同一层)/完全二叉树(编号为i的结点和同深度的满二叉树标号为i的结点位置相同)
二叉树性质
1.至多
2.至多
3.n2 + 1 = n0
4.完全二叉树 logN + 1
5.完全二叉树
判断是不是根(i = 1)i/2 下取整双亲,有无左孩子,有无右孩子


2019-10-07这几天状态裂开了_第2张图片
二叉树性质5.jpg

二叉树的遍历
前序遍历/中序遍历/后序遍历(从左到右先叶子后结点的方式遍历访问左右子树,最后访问根节点)

推导过程必须含中序,不然不唯一。
4.线索二叉树
n个结点存在 2n-(n-1)= n+1个空指针域
加上线索的二叉链表称为线索链表,相应的二叉树成为线索二叉树。

线索二叉树建立的算法先放着吧,哭了

树、森林、二叉树的转换
树-二叉树 森林-二叉树
二叉树-树 二叉树-森林

树和森林的遍历
树:先根/后根
森林:前序/后序
森林的前序遍历和二叉树的前序遍历结果一样

森林的后序遍历和二叉树的中序遍历结果一样

5.哈夫曼树
1.根据给定的n个权值构成n棵二叉树的集合
2.在集合中选取两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,置新的二叉树的根结点的权重为左右子树根结点权重和
3.在集合中删除这两个子树,同时新得到的二叉树加入
4.重复 2 3.

6.二叉排序树
定义:他或者是一棵空树或者有如下性质的二叉树:

  • 若左子树不空,则右子树上的结点的值均小于根结点的值
  • 若右子树不空。。。。
  • 他的左右子树也是二叉排序树

查询/插入/删除
删除:
独子继承父业
找到要删除结点的前驱或者后继进行替换

总结:
二叉排序树以链接的方式存储。
插入、删除、查找较优
缺点就是二叉排序树的形状不确定

9.7 AVL平衡二叉树
是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多为1

你可能感兴趣的:(2019-10-07这几天状态裂开了)