树(Tree)是n(n>=0)个结点的有限集。如下图中,A为根,图6.1(a)称为子树(SubTree)

结点度(Degree):如A的结点度为3,B的结点度为2,C的结点度为1。

结点度为0的结点叫叶子(Leaf):如K,L,M。

孩子(Child):如L是E的孩子,E是B的孩子。

双亲(Parent):A是B的双亲,B是E的双亲。

兄弟(Sibling):如BCD为兄弟。

层次(Level):根为第一层,然后第二层,第三层。

深度(Depth):上图深度为4。

森林(Forest):是m(m>=0)颗互不相交的树的集合。

树的存储结构是干什么的??

操作系统的文件管理,目录管理,网络系统中的域名管理,数据库系统里面的索引,编译器的语法书等等

因为内存是线性的,所以下面表示树只有三种表示法:

双亲、孩子、孩子兄弟表示法

下面给出双亲表示法:

typedef int ElemType;typedef struct PTNode
{ElemType data; //结点数据int parent;   //双亲位置
}PTNode;typedef struct
{PTNode nodes[MAX_TREE_SIZE];int r; //根结点位置int n;   //结点数目
}PTree;

如下,这样的话,上图可以写成这样:

下标 数据 父母
0 A -1
1 B 0
2 E 1
3 K 2
4 L 2
5 F 1
6 C 0
7 G 6
8 D 0
9 H 8
10 M 9
11 I 8
12 J 6

大家先不要掌握这个是如何排序的,只要知道,这个父母表示法就是类似于这样的。

这个的缺点是,如果要知道某个孩子是什么,就要遍历整个树。

我们也可以把结构改变,增加两列,上面填写他们孩子的下标。

下面是孩子表示法:

下面直接表示,因为为了演示方便,在此就不排序了。以后说到再排序

孩子父亲表示法就是在这行加入父亲行号如下图:

下面是代码:

 //双亲孩子表示法
#define  MAX_TREE_SIZE 100
typedef int ElemType;//孩子结点
typedef struct CTNode
{int child; //孩子结点的下标struct CTNode *next;   //指向下一个孩子结点的指针
}*ChildPtr;//表头结构
typedef struct
{ElemType data;int parent;  //下标表示ChildPtr firstChild;
}CTBox;//树结构
typedef struct
{CTBox nodes[MAX_TREE_SIZE];    //结点数组int r, n; //根的位置,和结点数目

6.1树的定义和存储相关推荐

  1. 数据结构(十八)树的定义与存储结构

    一.树的定义 1.树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点:(2)当n>1时,其余结点可分为m( ...

  2. 数据结构 树的链式存储(二叉表示法)

    //树的链式存储--二叉表示法 #include<stdio.h> #include<stdlib.h> #include<string.h>typedef str ...

  3. 为什么用B+树做索引MySQL存储引擎简介

    索引的数据结构 为什么不是二叉树,红黑树什么的呢? 首先,一般来说,索引本身也很大,不可能全部存在内存中,因此索引往往以索引文件的方式存在磁盘上.然后一般一个结点一个磁盘块,也就是读一个结点要进行一次 ...

  4. 二叉树第i层中的所有结点_讲透学烂二叉树(二):图中树的定义amp;各类型树的特征分析...

    日常中我们见到的二叉树应用有,Java集合中的TreeSet和TreeMap,C++ STL中的set.map,以及Linux虚拟内存的管理,以及B-Tree,B+-Tree在文件系统,都是通过红黑树 ...

  5. R树:处理空间存储问题

    转自大神的博客:http://blog.csdn.net/v_JULY_v/article/details/6530142/ R树:处理空间存储问题 相信经过上面第一节的介绍,你已经对B树或者B+树有 ...

  6. 数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)

    目录 什么是哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 图解操作 代码实现 代码解析 哈夫曼树的特点 哈夫曼编码 不等长编码 二叉树用于编码 哈夫曼编码实例 什么是哈夫曼树 我们先举个例子: 要将百分制 ...

  7. 从AVL树的定义出发,一步步推导出旋转的方案。

    本文从AVL树的定义出发,一步步地推导出AVL树旋转的方案,这个推导是在已经清楚地知道AVL树的定义这个前提下进行的.文章注重思考的过程,并不会直接给出AVL树是怎样旋转的,用来提醒自己以后在学习的时 ...

  8. (王道408考研数据结构)第五章树-第一节:树的定义、基本用语和常考性质

    文章目录 一:树基本概念 (1)树的定义 (2)结点分类 (3)结点关系(相关术语) 二:树的常考性质 一:树基本概念 (1)树的定义 树(Tree):这是一种非线性结构.是 n n n(

  9. mysql叶子结点存储的什么_B+树叶子结点到底存储了什么?

    首先MYSQL默认InnoDB引擎,该引擎默认B+树:先说结论:B+树叶子结点存储的是主键KEY或者具体数据.分情况讨论: 主键KEY 比如说user_name是个索引,当执行该SQL:select ...

最新文章

  1. 体绘制(Volume Rendering)概述介绍
  2. 云计算服务在小企业中的作用?
  3. 个人高效写作MarkDown博文模板
  4. Python学习笔记--函数
  5. 【转】日志记录库(log4cxx)使用指南
  6. 【RAC】How to Proceed from Failed 11gR2 CRS Installation
  7. JavaScript数组方法速查手册
  8. 分享一些很不错的学习资源网站
  9. 3-4 文件读写例子(2)
  10. 一分钟快速制作电子签名
  11. 跨域组播--MBGP+MSDP+Anycast RP
  12. 一款简洁的税后工资计算器(2019)
  13. 抖音小程序怎么注册?一文看懂抖音小程序注册开发流程
  14. 使用pdfbox把PDF转换成图片
  15. 怎么画出好的架构图,架构师必备!
  16. 云平台的几个概念和典型平台关系对比
  17. 尼古拉·特斯拉——一个比爱迪生更伟大却被世界遗忘的科学巨人
  18. 信息系统项目管理师2019年下半年上午试题解析(三)
  19. 系统迁移性能问题解决
  20. 在linux系统中 创建用户账户的同时,在Linux系统中大批量建立帐户

热门文章

  1. 实战 | 我创造了新的编程语言!
  2. 奇虎回应委员退出360督导委员会 称流氓软件产业链已基本消灭
  3. 《南方都市报》:中国互联网“公共性”正在变形或流失
  4. [CB]将窗体从属于主窗体
  5. Python有多火,来看一份24小时榜单,从入门到进阶,赶紧收藏!
  6. 程序员,这600单词你知道吗?
  7. php 5.5.12 yaf,yaf框架教程(5)- yaf框架的启动文件
  8. badboy设置中文_[转载]Badboy使用教程
  9. php scandir遍历,php使用scandir()函数扫描指定目录下所有文件示例
  10. java 完全匹配,Java 正则表达式匹配模式(贪婪型、勉强型、占有型)