二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。
1.普通二叉树几种特殊情况
满二叉树:在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。
2.满二叉树完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。
特点:若设二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边,这就是完全二叉树。
3.完全二叉树斜树:所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。
4.左斜树二叉树的存储结构
1.顺序存储
二叉树的顺序存储结构就是使用一维数组存储二叉树中的结点,并且结点的存储位置,就是数组的下标索引。
5.完全二叉树 6.顺序存储由上图可看出,当二叉树为完全二叉树时,结点数刚好填满数组。
7.非完全二叉树 8.顺序存储但是当二叉树为非完全二叉树时,如图7,浅色点表示不存在,则会出现空间浪费的情况(如图8)。因此,顺序存储一般适用于完全二叉树。
2.二叉链表
既然顺序存储不能满足二叉树的存储需求,那么考虑采用链式存储。由二叉树定义可知,二叉树的每个结点最多有两个孩子。因此,可以将结点数据结构定义为一个数据和两个指针域。表示方式如图9所示:
9.链表则图7所示的二叉树可以用下图表示:
10.二叉链表二叉树遍历
二叉树遍历是指从二叉树的根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次,遍历方式主要有三种:
11.二叉树1.前(根)序遍历(根左右)
图11所示二叉树的前序遍历输出为:ABDHIEJCFG
2.中(根)序遍历(左根右)
图11所示二叉树的中序遍历输出为:HDIBJEAFCG
3.后(根)序遍历(左右根)
图11所示二叉树的后序遍历输出为:HIDJEBFGCA
网友评论