链表与二叉树
链表与二叉树
链表
1、什么是链表
链表是由一组不必相连(不必相连:可以连续也可以不连续)的内存结构(节点),按特定的顺序链接在一起的抽象数据类型。
2、链表与数组的区别和优缺点
数组 | 链表 | |
---|---|---|
区别 | 数组是一种连续存储性结构,元素类型相同,大小相等 | 链表是离散存储线性结构 |
优点 | 存取速度快 | ①没有空间限限制②插入删除元素快 |
缺点 | ①事先必须知道数组的长度②插入删除元素很慢③空间通常是有限制的④需要大块连续的内存块⑤插入删除元素的效率很低 | 存取速度慢 |
3、链表的类别
(1)单链表
单链表由各个内存结构通过一个Next指针连接在一起组成,每一个内存结构都存在后继内存结构(链尾除外),内存结构由数据域和Next指针域组成。
(2)双向链表
由各个内存结构通过指针Next 和指针Prev 链接在一起组成,每一个内存结构都存在前驱内存结构和后继内存结构(链头没有前驱,链尾没有后继),内存结构由数据域、Prev 指针域和Next 指针域组成。
(3)循环链表
1)单向循环链表
单向循环链表由各个内存结构通过一个指针Next 链接在一起组成,每一个内存结构都存在后继内存结构,内存结构由数据域和Next 指针域组成。
2)双向循环链表
双向循环链表由各个内存结构通过指针Next 和指针Prev 链接在一起组成,每一个内存结构都存在前驱内存结构和后继内存结构,内存结构由数据域、Prev 指针域和Next 指针域组成。
二叉树
1、什么是二叉树
二叉树就是每个节点不能多于有两个儿子,即结点的度最大为2。
结点度:结点拥有的子树数。
而且还是一种特殊的二叉树:二叉查找树(当前根节点的左边全部比根节点小,当前根节点的右边全部比根节点大)。
2、二叉数的种类
(1)斜树
所有结点都只有左子树,或者右子树
(2)满二叉树
所有的分支结点都具有左右结点。
(3)完全二叉树
若设二叉树的深度为h,除第h 层外,其它各层(1~h-1) 的结点数都达到最大个数,第h 层所有的结点都连续集中在最左边,这就是完全二叉树。
3、性质
二叉树第i层上的结点数目最多为2^(i-1) (i≥1)
深度为h的二叉树至多有2^h-1个结点(h≥1)
包含n个结点的二叉树的高度至少为log2 (n+1)
在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1
4、遍历方式
二叉树的遍历方式分为广度遍历(按层遍历)和深度遍历。
二叉树的深度遍历方式,一般分为先序遍历,中序遍历,后序遍历。
- 先序遍历
o 先访问根节点,然后访问左节点,最后访问右节点(根->左->右) - 中序遍历
o 先访问左节点,然后访问根节点,最后访问右节点(左->根->右) - 后序遍历
o 先访问左节点,然后访问右节点,最后访问根节点(左->右->根)
先序遍历(根-左-右):1-2-4-8-9-5-10-3-6-7
中序遍历:(左-根-右):8-4-9-2-10-5-1-6-3-7
后序遍历(左-右-根):8-9-4-10-5-2-6-7-3-1