数据结构笔记——第五章 树和二叉树

本文详细介绍了树的逻辑结构,包括树的定义、基本术语,以及树的抽象数据类型定义和遍历操作。接着,重点讲解了二叉树的逻辑结构,包括二叉树的定义、基本性质、遍历方法,以及二叉树的存储结构,如二叉链表、三叉链表和线索链表。最后,提到了树与森林与二叉树之间的转换,以及哈夫曼树的概念。
摘要由CSDN通过智能技术生成

5.1 数的逻辑结构

5.1.1 数的定义和基本术语

    1、树的定义

          n(n>=0)个结点的有限集合。当n=0时,称为空树;任意非空树满足:

     1)有且仅有一个特定的称为根的结点;

     2)当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合,其中每个集合是一棵树,并称为根结点的子树。

      树中将数据元素称为结点。

     2、树的基本术语

     结点的度:某结点所拥有的子树的个数。

     数的度:树中各结点度的最大值。

     叶子结点:度为0的结点。

     分支结点:度不为0的结点。

      孩子结点:某结点的子树;该结点为双亲结点;具有同一个双亲的孩子结点互为兄弟结点。

      路径:结点ni是结点ni+1的双亲(1<=i<k),把n1,n2,....,nk称为一条有n1至nk的路径。

      路径长度:路径上经过的边数。

      祖先:如果从x到y有一条路径,则x是y的祖先;y是x的子孙。

      结点的层数:规定根结点的层数为1。

      树的深度(高度):树中所有结点的最大层数。

      层序标号:将树中结点按照从上层到下层,同层从左到右的次序依次给他们编以从1开始的连续自然数。

      有序树:如果一棵树中结点的各子树从左到右是有次序的,即若交换了结点各个子树的相对位置,则构成不同的树;反之为无序树。

      森林:m>=0棵互不相交的树的集合。任一棵树删去根结点就变成森林。

     5.1.2  树的抽象数据类型定义

        ADT  Tree

       Data

       Operating

            InitTree             功能:初始化一棵树                                    后置条件:构造一棵树

            DestroyTree                 销毁一棵树                                                            释放该树占用的存储空间

            PreOrder                       前序遍历树                                                            树保持不变

            PostOrder                     后序遍历树                                                            树保持不变

            LeverOrder                    层序遍历树                                                            树保持不变

      endADT

     5.1.3  树的遍历操作

          定义:从根结点出发,按照某种次序访问树中所有结点,使得每个结点被访问一次且仅被访问一次。

        1、前序遍历              A B D E I F C G H

             树空,返回;否则

            1)访问根结点

            2)按照从左到右的顺序前序遍历根结点的每一棵树

        2、后序遍历             D I E F B G H C A

              树空,返回:否则

            1)按照从左到右的顺序后序遍历根结点的每一棵树

            2)访问根结点        

        3、层序遍历           A B C D E F G H I

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

     5.2  树的存储结构

        5.2.1   双亲表示法

        5.2.2   孩子表示法

        5.2.3   双亲孩子表示法

        5.2.4    孩子兄弟表示法

     5.3 二叉树的逻辑结构

        5.3.1  二叉树的定义

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

               特点:1)每个结点最多有两棵子树; 2)二叉树是有序的,其次序是不能任意颠倒的,即使树中的某个结点只有一棵子树,也要区分它是左是右。

               二叉树和树是两种结构。

               二叉树有五种基本形态:

              1)空二叉树

              2)只有一个根结点

              3)根结点只有左子树

              4)根结点只有右子树

              5)根结点既有左子树又有右子树

         1、斜树

             所有结点都只有左子树的二叉树称为左斜树;所有结点都只有右子树的二叉树称为右斜树。

            斜树的结点个数与深度相同。

         2、满二叉树

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

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

        3、 完全二叉树

              定义:对一棵具有n个结点的二叉树按层序编号,若编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同。

              特点:1)叶子结点只能出现在最下两层,且最下层的叶子结点都集中在二叉树左侧连续的位置; 2)如果有度为1的结点,只可能有一个,且该结点只有左孩子。

     5.3.2  二叉树的基本性质

      1、二叉树的第i层上最多有2^(i-1)个结点(i>=1)

      2、在一棵深度为k的二叉树中,最多有2^k-1个结点,最少有k个结点。

     3、在一棵二叉树中,如果叶子结点的个数为n0,度为2的结点个数为n2,则n0=n2+1.

     4、具有n个结点的完全二叉树的深度为|log2(n)|+1

     5、对一棵具有n个结点的完全二叉树中的结点从1开始按层序编号,则对于任意的编号为i(1<=i<=n)的结点,有

      1)i>1,结点i的双亲编号为|i/2|;否则结点i是根结点,无双亲。

      2)2i<=n,结点i的左孩子编号为2i;否则结点i无左孩子。

      3)2i+1<=n,结点i的右孩子编号为2i+1;否则无右孩子。

    5.3.3  二叉树的抽象数据类型定义

     ADT  BiTree

     Data

    Operation

        InitBiTree                 功能:初始化一棵二叉树                                         后置条件:构造一棵空的二叉树

       DestroyBiTree                      销毁一棵二叉树                                                                 释放二叉树占有的存储空间

       PreOrder                                前序遍历二叉树                                                                二叉 树保持不变

       InOrder                                   中序遍历二叉树                                                                二叉 树保持不变

       PostOrder                              后序遍历二叉树                                                                二叉树保持不变

       LeverOrder                             层序遍历二叉树                                                                二叉树保持不变

      endADT

      5.3.4 二叉树的遍历操作

         1、前序遍历         A B D G C E F

             二叉树空,返回;否则

            1)访问根结点

            2)前序遍历根结点的左子树

            3)前序遍历根结点的右子树

         2、中序遍历       D G B A E C F

             二叉树空,返回;否则

            1)中序遍历根结点的左子树

            2)访问根结点

            3)中序遍历根结点的右子树

          3、后序遍历        G D B E F C A

              二叉树空,返回:否则

            1)后序遍历根结点的左子树

            2)后序遍历根结点的右子树

            3)访问根结点

        4、层序遍历                 A B C D E F G

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值