有关树的术语

 

        1.结点

 

                和链表类似,树存储结构中也将存储的各个元素称为“结点”。

 

                对于树中某些特殊位置的结点,还可以进行更细致的划分,比如:

 

                父结点(双亲结点)、孩子结点和兄弟结点:

 

                        树根结点(简称“根节点”):特指树中没有双亲(父亲)的结点,一棵树有且仅有一个跟结点。

 

                        叶子结点(简称“叶节点”):特指树中没有孩子的结点,一棵树可以有多个叶子结点。

 

        2.子树

 

                通常我们将一棵树中的几个结点构成的“小树”称为这棵树的“子树”。

 

                树也可以这样定义:树是由根节点和若干棵子树构成的。

 

                注意:单个结点也可以看作是一棵树,该节点即为根节点。

 

        3.结点的度

 

                 一个结点拥有有子树的个数,就称为该节点的度。

 

                比较一棵树中所有结点的度,最大的度即为整棵树的度。

 

        4.结点的层次

 

                从一课数的树根开始,树根所在层为第一层,根的孩子结点所在的层为第二层,依次类推。树中结点层次的最大值,称为这棵树的深度或者高度。

 

        5.有序树和无序数

 

                如果一棵树中,各个结点左子树和右子树的位置不能交换,那么这棵树就称为有序树。反之,如果树中结点的左、右子树可以互换,那么这棵树就是一颗无序树。

 

                在有序树中,结点最左边的子树称为“第一个孩子”,最右边的称为“最后一个孩子”。

 

        6.森林

 

                由m (m >= 0)个互不相交的数组成的集合就称为森林。

 

                前面讲到,数可以理解为是由根结点和若干子树构成的,而这若干子树本身就是一个森林,因此树还可以理解为是由根结点和森林组成的。

 

         7.空树

 

                空树指的是没有任何结点的树,连根结点都没有。

 

    总结:树是一种非线性存储结构,通常用来存储逻辑关系为“一对多”的数据。

 

                使用树结构存储的各个结点,他们之前的关系类似于家谱中的成员关系,比如有父子关系、兄弟关系、表兄弟关系等。

 

2.二叉树

 

        满足以下两个条件的数就是二叉树:

 

                1.本身是有序树;

 

                2.2树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;

 

二叉树具有以下几个性质:

 

        1. 二叉树中,第 i 层最多有 2i-1 个结点。

 

        2. 如果二叉树的深度为 K,那么此二叉树最多有 2K-1 个结点。

 

        3. 二叉树中,终端结点数(叶子结点数)为 n0,度为 2 的结点数为 n2,则 n0=n2+1。 

 

        二叉树还可以继续分类,衍生出满二叉树和完全二叉树。

 

满二叉树

 

        如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。

 

         满二叉树除了满足普通二叉树的性质,还具有以下性质:

 

                1. 满二叉树中第 i 层的节点数为 2i-1 个。

 

                2. 深度为 k 的满二叉树必有 2k-1 个节点 ,叶子数为 2k-1。

 

                3. 满二叉树中不存在度为 1 的节点,每一个分支点中都两棵深度相同的子树,且叶子节点都在最底 层。 4. 具有 n 个节点的满二叉树的深度为 log2(n+1)。

 

完全二叉树

 

        如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二

 

叉树被称为 完全二叉树。

 

完全二叉树除了具有普通二叉树的性质,它自身也具有一些独特的性质,比如说,n 个结点的完全

 

二叉 树的深度为 ⌊log2n⌋+1。 对于任意一个完全二叉树来说,如果将含有的结点按照层次从左到右

 

依次标号,对于任意一个结点 i , 完全二叉树还有以下几个结论成立:

 

                 1. 当 i>1 时,父亲结点为结点 [i/2] 。(i=1 时,表示的是根结点,无父亲结点)

 

                 2. 如果 2i>n(总结点的个数) ,则结点 i 肯定没有左孩子(为叶子结点);否则其左孩子是结点 2i 。

 

                3. 如果 2i+1>n ,则结点 i 肯定没有右孩子;否则右孩子是结点 2i+1 。