6.1树的定义和存储
树(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.树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点:(2)当n>1时,其余结点可分为m( ...
- 数据结构 树的链式存储(二叉表示法)
//树的链式存储--二叉表示法 #include<stdio.h> #include<stdlib.h> #include<string.h>typedef str ...
- 为什么用B+树做索引MySQL存储引擎简介
索引的数据结构 为什么不是二叉树,红黑树什么的呢? 首先,一般来说,索引本身也很大,不可能全部存在内存中,因此索引往往以索引文件的方式存在磁盘上.然后一般一个结点一个磁盘块,也就是读一个结点要进行一次 ...
- 二叉树第i层中的所有结点_讲透学烂二叉树(二):图中树的定义amp;各类型树的特征分析...
日常中我们见到的二叉树应用有,Java集合中的TreeSet和TreeMap,C++ STL中的set.map,以及Linux虚拟内存的管理,以及B-Tree,B+-Tree在文件系统,都是通过红黑树 ...
- R树:处理空间存储问题
转自大神的博客:http://blog.csdn.net/v_JULY_v/article/details/6530142/ R树:处理空间存储问题 相信经过上面第一节的介绍,你已经对B树或者B+树有 ...
- 数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)
目录 什么是哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 图解操作 代码实现 代码解析 哈夫曼树的特点 哈夫曼编码 不等长编码 二叉树用于编码 哈夫曼编码实例 什么是哈夫曼树 我们先举个例子: 要将百分制 ...
- 从AVL树的定义出发,一步步推导出旋转的方案。
本文从AVL树的定义出发,一步步地推导出AVL树旋转的方案,这个推导是在已经清楚地知道AVL树的定义这个前提下进行的.文章注重思考的过程,并不会直接给出AVL树是怎样旋转的,用来提醒自己以后在学习的时 ...
- (王道408考研数据结构)第五章树-第一节:树的定义、基本用语和常考性质
文章目录 一:树基本概念 (1)树的定义 (2)结点分类 (3)结点关系(相关术语) 二:树的常考性质 一:树基本概念 (1)树的定义 树(Tree):这是一种非线性结构.是 n n n(
- mysql叶子结点存储的什么_B+树叶子结点到底存储了什么?
首先MYSQL默认InnoDB引擎,该引擎默认B+树:先说结论:B+树叶子结点存储的是主键KEY或者具体数据.分情况讨论: 主键KEY 比如说user_name是个索引,当执行该SQL:select ...
最新文章
- 体绘制(Volume Rendering)概述介绍
- 云计算服务在小企业中的作用?
- 个人高效写作MarkDown博文模板
- Python学习笔记--函数
- 【转】日志记录库(log4cxx)使用指南
- 【RAC】How to Proceed from Failed 11gR2 CRS Installation
- JavaScript数组方法速查手册
- 分享一些很不错的学习资源网站
- 3-4 文件读写例子(2)
- 一分钟快速制作电子签名
- 跨域组播--MBGP+MSDP+Anycast RP
- 一款简洁的税后工资计算器(2019)
- 抖音小程序怎么注册?一文看懂抖音小程序注册开发流程
- 使用pdfbox把PDF转换成图片
- 怎么画出好的架构图,架构师必备!
- 云平台的几个概念和典型平台关系对比
- 尼古拉·特斯拉——一个比爱迪生更伟大却被世界遗忘的科学巨人
- 信息系统项目管理师2019年下半年上午试题解析(三)
- 系统迁移性能问题解决
- 在linux系统中 创建用户账户的同时,在Linux系统中大批量建立帐户
热门文章
- 实战 | 我创造了新的编程语言!
- 奇虎回应委员退出360督导委员会 称流氓软件产业链已基本消灭
- 《南方都市报》:中国互联网“公共性”正在变形或流失
- [CB]将窗体从属于主窗体
- Python有多火,来看一份24小时榜单,从入门到进阶,赶紧收藏!
- 程序员,这600单词你知道吗?
- php 5.5.12 yaf,yaf框架教程(5)- yaf框架的启动文件
- badboy设置中文_[转载]Badboy使用教程
- php scandir遍历,php使用scandir()函数扫描指定目录下所有文件示例
- java 完全匹配,Java 正则表达式匹配模式(贪婪型、勉强型、占有型)