数据结构知识点总结之树

数据结构

概念

  • 结点的度

    • 结点的子树数目
  • 所有结点的度的总和

    • 即边的数目:m=n-1
  • 树的度

    • 树所有结点中的最大度为树的度
  • 树深度/高度

    • 树中结点的最大层次

二叉树

  • 定义

    • 二叉树是度为2的有序树

    • 节点n

      • 高度h
  • 性质

    • \(h\le n \le 2^h-1\)
    • \(log_2(n+1)\le h\le n\)
    • \(n_2=n_0-1\)
  • 特殊二叉树

    • 满二叉树

      • 结点数\(2^h-1\)
      • 从上到下从左到右标序
    • 完全二叉树

      • 满二叉树缺失一部分,但是节点序号不变

      • 非根结点(i>1)

        • 父节点

          • i/2
        • 儿子节点

          • 左孩子

            • 2i
          • 右孩子

            • 2i+1
    • 斜二叉树

  • 存储结构

    • 顺序二叉树

      • 一般二叉树->完全二叉树
      • 空间浪费
    • 链式二叉树

      • 结构

        • 二叉链表

          • LeftChild|data|RightChild
        • 三叉链表

          • LeftChild|data|Parent|RightChild
  • 遍历二叉树

    • 前序遍历

    • 中序遍历

    • 后序遍历

    • 层序遍历

      • 队列实现
  • 线索二叉树

    • 线索化

      • 以某种方式遍历并使其成为线索二叉树
      • 利用空指针域作为前驱后继
    • 目的

      • 加快查找结点的前驱后继
    • 原理

      • 二叉树指针域:2n个

      • 非空指针域:n-1

      • 空指针域:n+1

        • 左空指针域

          • 记录结点前驱
        • 右空指针域

          • 记录结点后继
  • 应用

      • 特性

        • 结构性

          • 用数组表示的完全二叉树
        • 有序性

          • 任意结点的关键字是其子树结点的最大值
      • 分类

        • 最大堆
        • 最小堆
      • 操作

    • 哈夫曼树

      • 概念

        • 带权路径长度\(WPL=\sum_{k=1}^n{W_k*L_k}\)
      • 构造

        • 按权值排序形成最小堆
        • 取权值最小的两个结点作为树的叶子结点
        • 求根结点的权值(叶子结点权值之和),加入最小堆中
      • 应用

        • 编码

          • 权重为每个字符出现的概率
          • 哈夫曼树左右分支为0,1
          • 根据根到结点的路径编码
        • 译码

          • 根据编码搜索哈夫曼树
          • 找到叶子结点即译码

一般树

  • 存储结构

    • 双亲表示法

      • 数组:data|parent
    • 孩子表示法

      • 数组:data|child
    • 双亲孩子表示法

      • 数组+链表

        • data|parent|*children
    • 长子兄弟表示法

      • 链表:firstchild|data|nextsibling
  • 树、森林、二叉树的转换

    • 树转二叉树

      • 长子-兄弟法
    • 森林转二叉树

      • 先每棵树转二叉树
      • 从第二棵树开始,依次把当前二叉树根结点的右子树
    • 二叉树转森林

      • 将二叉树根节点的右子树依次分裂
  • 树的遍历

    • 先根遍历
    • 后根遍历
    • 层次遍历
  • 森林的遍历

    • 先根遍历
    • 中根遍历
    • 后根遍历
    • 层次遍历

等价类

并查集

posted @ 2020-07-08 09:55  wgjmcal  阅读(413)  评论(0编辑  收藏  举报