1. 掌握树的基本概念
- 树是一种非线性的数据结构,他通常是由n个(n>=0)有限结点组成的一个具有层次关系的集合。把他叫作树是因为
- 它看起来像一颗倒挂的树,也就是说它是根朝上,叶朝下的。它具有以下的特点,每个结点有零个或者多个子结点;
- 没有父结点的结点称作根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个自结点又可以
2. 掌握树的相关概念
- 结点的度:一个结点含有子树的个数称为该结点的度
- 叶结点:度为0的结点称为叶结点
- 双亲结点或父结点:若一个结点含有子结点,则称这个结点是该子结点的父结点
- 孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点
- 兄弟结点:具有相同父结点的结点称为兄弟结点
- 树的度:一棵树中,最大结点的度称为树的度
- 树的高度或深度:树中结点的最大层次
- 结点的层次:从根结点开始定义,根为第一层,根的子结点为第二层,以此类推
3. 掌握树的表示方式
- 树结构的相对线性表比较复杂,因此想要表示比较复杂,实际引用中的表示方法有很多
例如孩子兄弟表示法:
typedef int DataType;
struct Node
{
struct Node* _firstChild1; //第一个孩子结点
struct Node* _pNextBrother; //指向其下一个兄弟
DataType _data; //结点中的数据
};
孩子表示法:
typedef int DataType;
struct Node
{
DataType _data;
struct Node* child1;
struct Node* child2;
struct Node* child3;
};
双亲表示法(求双亲结点较为简单,求孩子结点比较复杂):
typedef int DataType;
struct Node
{
DataType _data;
struct Node* _parent;
};
4. 熟悉二叉树的基本概念以及特性
一颗二叉树是结点的一个有限集合,该集合或者为空,或者是由根节点加上两棵分别称为左子树和
右子树的二叉树组成
二叉树的特点:
(1)每个节点最多有两棵子树,即二叉树不存在度大于2的节点
(2)二叉树的子树有左右之分,其次序不能颠倒
5.熟悉完全二叉树以及满二叉树的概念
- 满二叉树:
一个二叉树,如果其每一层的结点数都达到最大值,则这个二叉树为满二叉树。也就是说,如果
一个二叉树的层数为k,且节点总数为(2^k)-1,则他就是满二叉树 - 完全二叉树:
完全二叉树是由满二叉树引申出来的,对于深度为K的,有n个节点的二叉树,当且仅当其每一个节点
都与深度为k的满二叉树中编号1到n的节点一一对应,则称其为完全二叉树。
6. 熟悉二叉树的性质:
1.若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2^i-1(i>0)个节点
2.若规定只有根节点的二叉树的深度为1,则深度为k的二叉树的最大节点数为(2^k)-1(k>=0)
3.对任意一棵二叉树,如果其叶节点的个数为n0,度为2的非叶节点个数为n2, 则n0=n2+1
4.具有n个节点的完全二叉树的深度k为log2(n+1)向上取整(向大数取整)
5.对于具有n个节点的完全二叉树,如果按照从上至下,从左至右的顺序,对所有节点从0编号
序号i的特点:
(1)若i>0,双亲节点:(i-1)/2;
(2)若2i+1<n,则左孩子为2i+1;否则无左孩子
(3)若2i+2<n,则右孩子为2i+2;否则无右孩子
7. 熟悉二叉树的存储方式
顺序存储:
顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储,关于堆我们后面的章节会专门讲解。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树
链式存储:
通常的方法是链表中每个节点由三个域组成,数据域和左右指针域左右指针分别用来指向左孩子和右孩子所在链节点的存储地址。