目录
一、简介
如果一棵树中的每个结点有0、1或者2个孩子结点,那么这棵树就称为二叉树。
空树也是一棵有效的二叉树。
一棵二叉树可以看作由根结点和两棵不相交的子树(分别称为左子树和右子树)组成。
如下图所示:
二、二叉树的类型
1. 严格二叉树
严格二叉树:二叉树中的每个结点要么有两个孩子结点,要么没有孩子结点。
2. 满二叉树
满二叉树:二叉树中的每个结点恰好有两个孩子结点且所有叶子结点都在同一层。
3. 完全二叉树
完全二叉树:在定义完全二叉树之前,假定二叉树的高度为h。
对于完全二叉树,如果将所有结点从根结点开始从左至右,从上至下,依次编号(假定根结点的编号为1),
那么将得到从1~n(n 为结点总数)的完整序列。
在遍历过程中对于空指针也应赋予编号。
如果所有叶子结点的深度为h或h一1,且在结点编号序列中没有漏掉任何数字,那么这样的二叉树叫作完全
二叉树。
三、二叉树的性质
为了讨论二叉树的下述性质,假定树的高度为h,且根结点的深度为0。
四、二叉树的结构
接下来定义二叉树的结构。为了简单起见,假定结点的数据为整数。
表示一个结点(包含数据)的方法之一是定义两个指针,一个指向左孩子结点,另一个指向右孩子结点,中间
为数据字段(如下图所示)。
在树中,默认的流向是从双亲结点指向孩子结点,但并不强制表示为有向边。
如下两种表示方法相同:
五、二叉树的操作
1. 基本操作
2. 辅助操作
六、二叉树的应用
七、二叉树的遍历
1. 简介
为了对树结构进行处理,需要一种机制来遍历树中的结点。访问树中所有结点的过程叫作树遍历。
在遍历过程中,每个结点只能被处理一次,尽管其有可能被访问多次。
我们已经知道,在线性数据结构(例如,链表、栈、队列)中,数据元素是以顺序方式被访问的。
但是,在树结构中,有多种不同的方式。
树遍历类似于在树中进行搜索操作,遍历的目标是按某种特定的顺序访问树的所有结点,
且遍历过程中所有的结点均需要处理,而搜索操作在找到指定结点时就会停止。
2. 遍历方式
从二叉树的根结点开始遍历,需要执行3