一、树
树形结构,非线性结构。
树是n个节点的有限集合。
树的定义是递归的。
1-1、树的基本概念
1、结点的度:一个结点的子树个数。
2、树的度:树中最大的结点的度数。
3、叶子结点:度为0的结点。
4、分支结点:度不为0的结点。
5、树的高度(深度):一棵树的最大层数。
1-2、树的性质
性质1:树中的结点总数 = 树中所有结点的度数之和 + 1
出题格式:
已知,度为1的结点个数为n1;度为2的结点个数为n2;度为3的结点个数为n3,求度为0的结点个数。
性质2:度为 m 的树中第i层上至多有 m^(i-1)个结点(i >= 1)。
性质3:高度为h的m次树,至多有个结点。(等比数列求和)
性质4:具有n个结点、度为m的树的最小高度为:
要求树的高度最小、需要每个结点的度都是m。即 n =
注意:
要取上界!!!
1-3、真题
真题1:
真题2:
注意:
这种类型的题目可以直接画个示图,举例子算。
二、二叉树
2-1、二叉树的定义
二叉树是n个结点的有限集合。
二叉树可以是空树。
二叉树、树的区别:
二叉树中结点的子树要区分左子树和右子树。
二叉树结点最大的度=2。
2-2、二叉树的性质
性质1:二叉树第i层上最多有2^(i-1)个结点;
树的性质:度为 m 的树中第i层上至多有 m^(i-1)个结点(i >= 1)。
性质2:高度为h的二叉树最多有个结点。
树的性质:高度为h的m次树,至多有个结点。(等比数列求和)
性质3:对于任何一个二叉树,度为0的结点数 = 度为2的结点数 + 1;
n0 = n2 + 1
树的性质: 树中的结点总数 = 树中所有结点的度数之和 + 1
性质4:具有n个结点的完全二叉树的高度为:
树的性质: 具有n个结点、度为m的树的最小高度为:
2-3、满二叉树、完全二叉树
2-3-1、满二叉树
高度为k的二叉树有2^k-1个结点。
2-3-2、完全二叉树
对满二叉树中的结点连续编号,自上而下,自左而右,每一个结点与满二叉树中的序号一一对应。
完全二叉树的特点:
- 高度为h的完全二叉树中,除了第h层(最后一层),其余各层都是满的;
- 第h层上的结点必须是从左到右的依次放置,不能为空。
完全二叉树的性质:
性质4:具有n个结点的完全二叉树的高度为:
2-4、真题
真题1:
真题2:
n0 = n2 + 1
真题3:
真题4:
真题5:
真题6:
计算n个结点的二叉树有多少种,可以用:
真题7:
2-5、二叉树的存储结构
2-5-1、二叉树的顺序存储
用一组地址连续的存储单元存储二叉树中的结点,结点在这个序列中的相应位置能反映出节点之间的逻辑关系。
依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系。
对于一般的二叉树,只有增添一些并不存在的空结点,使之成为一棵完全二叉树的形式,然后再用一维数组顺序存储。会造成空间的大量浪费,不宜用顺序存储结构。
最坏的情况是右单支树。
从一个结点的编号——>双亲、左孩子、右孩子
2-5-2、二叉树的链式存储
二叉链表的结点:
二叉链表,有n个结点,就有2n个指针域;有n-1个分支,就有n-1个有效指针域;
所以,二叉链表,n个结点,有n+1个空指针域。
三叉链表的结点:
三叉链表,n个结点,有n+2个空指针域。
2-5-3、真题
真题1:
真题2:
真题3:
真题4:
2-6、二叉树的遍历
1、先序遍历
根节点、左子树、右子树
A B D G C E F
2、中序遍历
左子树、根节点、右子树
B D G A E C F
3、后序遍历
左子树、右子树、根节点
G D B E F C A
4、层次遍历
从上到下、从左到右的访问结点。
A B C D E F G
2-7、根据遍历序列构造二叉树
4种遍历,单独看,都不能唯一确定一个二叉树。
其中最重要的是:中序遍历:左子树、根节点、右子树
1、先序遍历 + 中序遍历
从先序中得到每个子树的根节点(第一个节点),在中序中用根节点,划分出左右子树。
2、后序遍历 + 中序遍历
从后序中得到每个子树的根节点(最后一个节点),在中序中用根节点,划分出左右子树。
3、层次遍历 + 中序遍历
4、真题
真题1:
构造一个二叉树,中序序列一定要有!!!
真题2:
真题3:
真题4:
真题5:
真题6: