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

本文共 1439 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    NOIp模拟赛二十九
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>
    NoSQL介绍
    查看>>
    Notepad++在线和离线安装JSON格式化插件
    查看>>
    notepad如何自动对齐_notepad++怎么自动排版
    查看>>
    Notification 使用详解(很全
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    Now trying to drop the old temporary tablespace, the session hangs.
    查看>>
    nowcoder—Beauty of Trees
    查看>>
    np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
    查看>>
    npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
    查看>>
    npm install digital envelope routines::unsupported解决方法
    查看>>
    npm install 卡着不动的解决方法
    查看>>
    npm install 报错 EEXIST File exists 的解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>
    npm install 报错 fatal: unable to connect to github.com 的解决方法
    查看>>
    npm install 报错 no such file or directory 的解决方法
    查看>>
    npm install报错,证书验证失败unable to get local issuer certificate
    查看>>
    npm install无法生成node_modules的解决方法
    查看>>