非线性结构——树

    • 定义

      • 有且只有一个称为根的节点

      • 有若干个互不相交的子树,这些子树本身也是一颗树

        通俗来说

      • 树由节点和边组成

      • 每个节点都有唯一的父节点,和若干个子节点

      • 但是只有根节点是例外的,它没有父节点

    • 专业术语

      • 根节点
      • 节点
      • 父节点
      • 子节点
      • 子孙
      • 堂兄弟
      • 深度:从根节点到最底层节点的层数,根节点是第一层
      • 叶子节点:无子结点的节点
      • 非终端节点:非叶子节点
      • 度:子节点的个数(如果是树的度,则取最大者)
    • 分类

      • 一般树

        任意一个节点的子节点的个数都不受限制

      • 二叉树

        任意一个节点的子节点个数最多两个,且子节点的位置不可更改

        • 一般二叉树

        • 满二叉树

          在不增加树层数的前提下无法在增加一个节点的二叉树

        • 完全二叉树

          如果只是删除了满二叉树最底层最右边的连续若干个节点,这样形成的二叉树就是完全二叉树

      • 森林

        n个互不相交的树的集合

    • 树的存储

      • 二叉树的存储
        • 连续存储【完全二叉树】

          • 优点

            查找某个节点的父节点和子节点(也包括判断有没有子节点)速度快

          • 缺点

            耗用内存空间过大

        • 链式存储

      • 一般树的存储
        • 双亲表示法:右侧为该左侧节点父节点的下标

          求父节点方便

          在这里插入图片描述

        • 孩子表示法

          求子节点方便

          在这里插入图片描述

        • 双亲孩子表示法

          求父节点和子节点都很方便

          在这里插入图片描述

        • 二叉树表示法

          把一个普通树转化位一个二叉树来存储

          具体转化方法

          ​ 设法保证:

          ​ 任意一个节点的

          ​ 左指针域指向它的第一个孩子节点

          ​ 右指针域指向它的下一个兄弟节点

          ​ 只要能够满足此条件,就可以把一个普通树转化为二叉树
          在这里插入图片描述

          一个普通树转化为二叉树,一定没有右子树

      • 森林的存储

        先把森林转换为二叉树,在存储二叉树:树与树的根节点视为相邻,即B视为A的右侧兄弟节点
        在这里插入图片描述

    • 二叉树操作

      • 遍历

        ——递归的思想

        ——所谓先、中、后可以理解为访问根节点的顺序先、中、后

        • 先序遍历【先访问根节点】

          先访问根节点

          再先序访问左子树

          再先序访问右子树
          在这里插入图片描述

        • 中序遍历【中间访问根节点】

          中序遍历左子树

          再访问根节点

          再中序遍历右子树
          在这里插入图片描述

        • 后序遍历 【最后访问根节点】

          后序遍历左子树

          后序遍历右子树

          再访问根节点
          在这里插入图片描述

      • 已知两种遍历序列求原始二叉树

        • 通过先序和中序或者后序和中序可以回推原始二叉树

          • 已知先序和中序求后序

            比如:先序:ABCDEFGH

            ​ 中序:BDCEAFHG

            ​ 求后序:DECBHGFA
            在这里插入图片描述

          • 已知中序和后序求先序

            比如:中序:BDCEAFHG

            ​ 后序:DECBHGFA

            ​ 求先序:ABCDEFGH
            在这里插入图片描述

          • 总结:无论是以上哪种,先后序确定根节点,从而得到左右子树,接着再找先后序对应子树的父节点,并由中序再次确定左右子树…

        • 通过先序和后序无法回推出原始二叉树

        • 即通过先序和中序或者后序和中序才可以唯一的确定一个二叉树

    • 应用

      • 树是数据库中数据组织一种重要形式
      • 操作系统子父进程的关系是一棵树
      • 面向对象语言中类的继承关系
      • 赫夫曼树
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值