线性结构主要描述具有单一的前驱和后继的数据。树结构是一种比线性结构更加复杂的数据结构,比较合适描述具有层次的数据,比如祖先—后代、上级—下级、整体—部分的关系。树结构在计算机领域中有着广泛的应用:如java中的语法树,利用二叉树进行搜索、排序等等。下面笔者将对树进行简单的介绍。
树: 是n个节点的有限集合,有且仅有一个特定的根结点,当n>1是,除根结点之外的奇遇节点被分成多个互不相交的有限集合,其中每个集合又是一棵树,成为根结点的子树。 某结点子树的个数称为该结点的度。 度为0的节点称为叶子节点。 节点层数:规定根结点的层数为1,对于其余任何结点,若某结点在第k层,其孩子结点在k+1层。树的高度:树中所有节点的最大层数称为树的深度或高度。
如图: A 是根节结点度为2; B 的度为3 ; D 为叶子结点,度为 0; F 的层数为 3; 树的深度(高度)为4
树的遍历:
前序遍历:(1)访问根节点 (2) 按照从左到有的顺序前序遍历根结点的每一棵子树。 上图的前序遍历为: A B D E I F C G H
后序遍历:(1)按照从左到有的顺序前序遍历根结点的每一棵子树 (2) 访问根结点。 上图的后序遍历为: D I E F B G H C A
层序遍历: 也称为广度遍历 从第一层开始,从上层到下层,每一层从左到右访问。上图的层序遍历为: A B C D E F G H I
对树有了简单的了解后,下面来了解下二叉树。
二叉树:是最简单的树结构,由一个根节点和两棵互不相交的左、右子树的二叉树租车。
特点: (1)每个结点最多有两棵子树,所以不存在度大于2的结点 (2) 二叉树是有序的,其次序不能颠倒,它的左子树不能反正根的由边。
满二叉树: 所有分支结点都存在左右子树,并且所有叶子结点都在同一层上。 满二叉树特点: 叶子只能出现在最下一层, 只有读为 0 和2 的结点
完全二叉树: 通俗的一句话讲: 就是在满二叉树上,最下层的右边开始去叶子结点。所以满二叉树必定是完全二叉树。
性质:
(1)二叉树的第 i 层上最多有2的i-1 次方 个结点。上图满二叉树中: 第三层最多有5个节点
(2)在一棵深度为k的二叉树中,最多有2的k次方 减1 个节点(满二叉树),最少有k个结点(一棵斜树)。
(3) 在一棵二叉树中,如果叶子结点的个数为n , 度为2的结点个数为m,则n = m + 1。 上图: 完全二叉树有
(4)具有n个节点的完全二叉树的深度为log 2 为底n 的对数 向下取整加1。
二叉树的遍历:
前序遍历: (1)访问根节点 (2)前序遍历根节点的左子树 (3)前序遍历根节点的右子树 。 下图前序: A B D G C E F
后序遍历: (1)前序遍历根节点的左子树 (2)前序遍历根节点的右子树(3)访问根节点 下图后序: G D B E F C A
中序遍历: (1)前序遍历根节点的左子树 (2)访问根节点 (3)前序遍历根节点的右子树 下图中序: D G B A E C F
层序遍历: 和树的遍历相同,从上到下,从左到右。 下图层序: A B C D E G
上面对树及二叉树的概念及相关特点性质等做了简单的介绍。接下来笔者将介绍二叉查找树、二叉排序树、平衡二叉树等做简单的介绍。