博客
关于我
第6章 树型结构
阅读量:442 次
发布时间:2019-03-06

本文共 1450 字,大约阅读时间需要 4 分钟。

第6章 树型结构

目录

一、树的基本概念

  • 树:由 (n(n \geq 0)) 个结点构成的有限集合
  • 根:有且仅有一个特定的结点
  • 结点的度:结点拥有的子女数
  • 树的度:所有结点度的最大值
  • 度为 (0) 的结点:终端结点(叶子结点)
  • 度不为 (0) 的结点:非终端结点(分支结点)
  • 树枝:连接两个结点的线段
  • 结点的层次:根结点为第 (1) 层,根的子女结点为第 (2) 层
  • 树的高度:树中结点最大层次树
  • 有序树:任意结点的子树看成是从左到右有次序,不能随意交换,否则为无序树
  • 森林:(m(m \geq 0)) 棵互不相交的树构成的集合(在森林的每棵树之上加一个共同的根,森林则成了一棵树)

二、树类的定义

-略

三、树的存储结构 (大概率不考)

  • 树的三种常用存储结构:双亲表示法、孩子表示法、孩子兄弟表示法

3.1 双亲表示法

  • 树的结点包含两个信息:结点的值 (data) 和体现结点之间相互关系的属性——该结点的双亲 (parent)

3.1.1 树的存储结构(双亲表示法)

#define MAXSIZE 100 // 树中结点个数的最大值
typedef char datatype; // 结点值的类型
// 结点的类型
typedef struct node {
datatype data;
int parent; // 结点双亲的下标
} node;
// 树的类型
typedef struct tree {
node treelist[MAXSIZE]; // 存放结点的数组
int length, root; // 树中实际所含结点的个数及根节点的位置
} tree;

四、树的遍历

  • 前序遍历:首先访问根结点,再从左到右依次按前序遍历的方式访问根结点的每一棵子树
  • 后序遍历:首先按后序遍历的方式访问根结点的每一棵子树,然后再访问根结点
  • 层序遍历:首先访问第一层上的根结点,然后从左到右依次访问第二层上的所有结点,……,最后访问树中最低一层的所有结点
  • 树的遍历常用操作:
    • 树的前序遍历的递归算法
    • 树的后序遍历的递归算法
    • 按前序遍历顺序建立一颗 (3) 度树
    • 树的层次遍历算法

五、树的线性表示(大纲未规定)

  • 注:仅凭借树的某种遍历序列有时无法唯一地确定一棵树,但只要在遍历序列的基础上加上一些附加信息,即可唯一地确定一棵树

5.1 树的括号表示

  • 常用操作:
    • 树的括号表示到树的孩子表示的转换算法
  • 树的括号表示:

5.2 树的层号表示

  • 常用操作:
    • 树的层号表示到树的扩充孩子表示的转换算法
  • 树的层号表示:

六、算法设计题

-略

七、错题集

  • 树最适合用来表示具有有序性和层次性的数据
  • 在选择存储结构时,既要考虑数据值本身的存储,还需要考虑数据间关系的存储
  • (真题)对于一颗具有 (n) 个结点的树,该树中所有结点的度数之和为 (n-1)
  • 已知一棵度为 (m) 的树中有 (n_1) 个度为 (1) 的结点, (n_2) 个度为 (2) 的结点,……,(n_m) 个度为 (m) 的结点,问该树中有多少个叶子结点?
    • 树中结点总数 (n = n_0 + n_1 + n_2 + \dots + n_m)
    • 树中结点的度数之和为 (n-1),且有:(n-1 = n_1 + 2n_2 + 3n_3 + \dots + m n_m) (用上题 (3) 的定理)
    • 所以叶子结点个数为:(n_0 = 1 + n_2 + 2n_3 + \dots + (m-1)n_m)

    转载地址:http://brgyz.baihongyu.com/

    你可能感兴趣的文章
    nginx 代理解决跨域
    查看>>
    Nginx 动静分离与负载均衡的实现
    查看>>
    Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
    查看>>
    nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    Nginx 反向代理配置去除前缀
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 多端口配置和访问异常问题的排查与优化
    查看>>
    Nginx 如何代理转发传递真实 ip 地址?
    查看>>
    Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 学习(一):Nginx 下载和启动
    查看>>
    nginx 常用指令配置总结
    查看>>
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    nginx 开启ssl模块 [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 结合 consul 实现动态负载均衡
    查看>>