第五章 数和二叉树

来源:互联网 发布:好看的纪录片 知乎 编辑:程序博客网 时间:2024/05/31 06:23
 5、1   树的逻辑结构
   1、 结点的度:结点所拥有的子树的个数。
    树的度树中各结点度的最大值。
    叶子结点度为0的结点,也称为终端结点。
    分支结点:度不为0的结点,也称为非终端结点。
   孩子、双亲:树中某结点子树的根结点称为这个结点的孩子结点,这个结点称为它孩子结点的双亲结点
   兄弟:具有同一个双亲的孩子结点互称为兄弟。

   祖先、子孙:在树中,如果有一条路径从结点x到结点y,则x称为y的祖先,而y称为x的子孙。

   结点所在层数:根结点的层数为1;对其余任何结点,若某结点在第k层,则其孩子结点在第k+1层。

   树的深度:树中所有结点的最大层数,也称高度

   有序树、无序树:如果一棵树中结点的各子树从左到右是有次序的,称这棵树为有序树;反之,称为无序树。

    森林:m(m≥0)棵互不相交的树的集合。

   树的遍历:结点出发,按照某种序访问树中所有结点,使得每个结点被访问一次且仅被访问一次。

  2、前序遍历

  树的前序遍历操作定义为:

  若树为空,则空操作返回;否则 ⑴ 访问根结点;⑵ 按照从左到右的顺序前序遍历根结点的每一棵子树。

  树的层序遍历:

   从树的第一层(即根结点)开始,自上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。

  5.2  树的存储结构

      1、双亲表示法的基本思想:用一维数组来存储树的各个结点(一般按层序存储),数组中的一个元素对应树中的一个结点,包括结点的数据信息以及该结点的双亲在数组中的下标。

5.3 二叉树的逻辑结构

     1、 二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。

    2、满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上。

    特点:1.叶子只能出现在最下一层;2.只有度为0和度为2的结点。

      3、完全二叉树对一棵具有n个结点的二叉树按层序编号,如果编号为i(1≤in的结点与同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同。
  4、特殊的二叉树:在满二叉树中,从最后一个结点开始,连续去掉任意个结点,即是一棵完全二叉树。
  5、 在一棵二叉树中,如果叶子结点数为n0,度为2的结点数为n2,则有: n0=n2+1。
  6、完全二叉树的性质:对一棵具有n个结点的完全二叉树中从1开始按层序编号,则对于任意的序号为i(1≤in的结点(简称为结点i),有:

(1)如果i>1,则结点i的双亲结点的序号为 i/2;如果i=1,则结点i是根结点,无双亲结点。

(2)如果2i≤n,则结点i的左孩子的序号为2i;

如果2i>n,则结点i无左孩子。

(3)如果2i+1≤n,则结点i的右孩子的序号为2i+1;如果2i+1>n,则结点i无右孩子。

7、二叉树的遍历操作

   若二叉树为空,则空操作返回;否则:

 ①访问根结点;

 ②前序遍历根结点的左子树;

 ③前序遍历根结点的右子树。

5.4 二叉树的存储结构及实现

1、顺序存储结构:二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位(下标)应能体现结点之间的逻辑关系——父子关系。

2、层序遍历:1.队列Q初始化;2. 如果二叉树非空,将根指针入队;3. 循环直到队列Q为空

     3.1 q=队列Q的队头元素出队;

     3.2 访问结点q的数据域;

     3.3 若结点q存在左孩子,则将左孩子指针入队;

     3.4 若结点q存在右孩子,则将右孩子指针入队;

5.5  二叉树遍历的非递归算法

  1、前序遍历非递归算法:
     二叉树前序遍历的非递归算法的关键:在前序遍历过某结点的整个左子树后,如何找到该结点的右子树的根指针。
解决办法:在访问完该结点后,将该结点的指针保存在中,以便以后能通过它找到该结点的右子树。

5.6  树、森林与二叉树的转换


1、树转换为二叉树:
     ⑴加线——树中所有相邻兄弟之间加一条连线。⑵去线——对树中的每个结点,只保留它与第一个孩子结点之间的连线,删去它与其它孩子结点之间的连线。⑶层次调整——以根结点为轴心,将树顺时针转动一定的角度,使之层次分明。
2、二叉树转换为树或森林:
   ⑴加线——若某结点x是其双亲y的左孩子,则把结点x的右孩子、右孩子的右孩子、……,都与结点y用线连起来;

   ⑵去线——删去原二叉树中所有的双亲结点与右孩子结点的连线;

   ⑶层次调整——整理由⑴、⑵两步所得到的树或森林,使之层次分明。

3、叶子结点的权值:对叶子结点赋予的一个有意义的数值量。

4、二叉树的带权路径长度:设二叉树具有n个带权值的叶子结点,从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和。

5、哈夫曼树:给定一组具有确定权值的叶子结点,带权路径长度最小的二叉树。

6、哈夫曼树的特点:

   (1) 权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。

  ( 2) 只有度为0(叶子结点)和度为2(分支结点)的结点,不存在度为1的结点.


  




0 0