1、树型结构
1.1 概念(了解)

这是数据结构的一棵树:
二者相比,可以看到数据结构的树就像是大自然中的树倒过来。注意:在树型结构中,子树之间不能有交集,否则就不是树型结构。
树与非树的判定:
1、 子树是不相交的:如图1:孩子结点C与D间存在交集,所以不是树型结构。
2、除了根结点没有父节点外,每个节点有且仅有一个父节点:如图,每个结点有且仅有一个父节点。
3、一棵有N个结点的树有N - 1条边。(下面证明二叉树性质要用)如图3,有8个结点,应该有7条边,但图中有8条,则图3不是树型结构。
1.2 概念(重要)
树的高度或深度:树中结点的最大层次;如上图:树的高度为4
1.3 树的表示形式(了解)
树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,实际中树有很多种表示方式,如:双亲表示法,孩子表示法、孩子双亲表示法、孩子兄弟表示法等等。我们这里就简单的了解其中最常用的孩子兄弟表示法。代码:
classNode{
int value;//树中存储的数据
Node firstChild;//第一个孩子引用
Node nextBrother;//下一个兄弟引用
}
1.4 树的应用
用于文件系统管理(目录和文件)
下图是linux系统模拟,windows系统的应用,就是打开我的电脑,不同盘下面的不同文件。
2、二叉树 (重点!!!)
2.1 概念

由上图可以看出:

2.2 两种特殊的二叉树

2.3 二叉树的性质(做题要用!!!)
1、若规定根结点的层数为1,则一棵非空二叉树的第 i 层上最多有 2 ^ (i - 1) (i > 0)个结点。(满二叉树)。
2、若规定只有根节点的二叉树的深度为1,则深度为K的二叉树的最大结点数是 2 ^ k -1 (k >= 0) (每个结点都存在2个左右孩子)。
3.对任意一棵二叉树,如果其叶结点(度为0的结点)的个数为n0,度为2的非叶结点个数为n2,则有 n0 = n2 + 1(翻译:对于任何一棵二叉树,叶子结点的个数永远比度为2的非叶子结点的个数多一个)。证明过程如下:
4. 具有 n 个结点的完全二叉树的深度 k 为 向上取整
5.对于具有 n 个结点的完全二叉树,如果按照从上至下从左到右的顺序对所有结点从0开始编号,则对于序号为 i 的结点有(这个性质在优先级队列中要用到):
5.1、已知父亲下标为 i 求孩子结点下标 :左孩子:(2 * i) + 1 右孩子:(2 * i) + 2。
5.2、已知孩子下标 i 求父亲结点下标:(i - 1) / 2。
2.4 二叉树题目(性质相关)
1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为多少?
由性质3:叶子节点永远比度为2的节点多1个,所以一共有200个叶子节点。
2.在具有 2n 个结点的完全二叉树中,叶子结点个数为几?
因为二叉树有2n个节点,所以节点个数为偶数个,这里画图: 第一幅图的节点为偶数个,第二幅图节点为奇数个,我们知道一棵二叉树是由n0(度为0的节点)+n1(度为1的节点)+n2(度为2的节点构成)。由图可知:当节点为偶数个时,n1=1;当节点为奇数个时,n1=0。又根据n0 = n2+1,则有:2n = n0+n1+n2 = n0+1+n0-1,化简得:n0 = n。所以这里叶子节点个数为n。
3.一个具有767个节点的完全二叉树,其叶子节点个数为几?
因为节点个数为767为奇数,根据第2题所讲,易知:n1=0,所以有n0+n0-1 = 767,易得n0=384。
4.一棵完全二叉树的节点数为531个,那么这棵树的高度为几?
根据性质4: 易得高度为10(注意:这里是向上取整)