一对多的树型结构,有且只有一个特定的根结点。

结点的度:结点拥有子树的数量{

度为0:叶子结点/终端结点。

度不为0:非终端结点/分支结点(除去根结点其它称为内部结点)。}

树的度:树中所有结点的度数的最大值。

树的层次:根为第一层,以此类推。

结点的深度:根结点开始,自顶向下累加。

结点的高度:叶结点开始,自底向上累加。

树的高度(深度):树中结点的最大层数。

结点关系:

祖先结点:根结点到该点的唯一路径上的任意结点。

子孙结点

双亲结点:根结点到该点的唯一路径上的最近结点。

孩子结点

兄弟结点:有相同双亲结点的结点。

树中的数学关系:

1.树中的结点数等于所有结点的度数加1。

2.度为m的树中第i层上最多有mi-1个结点。

3.高度为h的m叉树至多有(mn-1)/(m-1)个结点。

4.具有n个结点的m叉树的最小高度为[logm(n(m-1)+1)]

树的存储结构

顺序存储结构

双亲表示法:用一组连续的存储空间存储树的结点,同时在每个结点中,用一个变量存储该结点双亲结点在数组中的位置。typedef char ElemType;

typedef struct TNode{
ElemType data; //结点数据
int parent; //该结点双亲在数组的下标
}TNode; //结点数据类型 #define MaxSize 100
typedef struct{
TNode nodes[MaxSize]; //结点数组
int n; //结点数量
}Tree; //树的双亲表示结构

链式存储结构

孩子表示法:把每个结点的孩子结点排列起来存储成1个单链表,所以n个结点有n个链表;

叶子结点链表为空;

n个单链表的头指针又存储在一个顺序表(数组)中。

孩子链表结点代码:

typedef char ElemType;
typedef struct CNode{
int child; //该孩子在表头的数组下标
struct CNode *next;//指向该结点的下一个孩子结点
}CNode,*child //孩子结点数据类型

每个孩子链表的表头结点(存在数组中):

typedef struct{
ElemType data; //结点数据域
child first child;//指向该结点的第一个孩子结点
}TNode; //孩子结点的数据类型
#define MaxSize 100
typedef struct{
TNode nodes[MaxSize];//结点数据域
int n; //树中结点数量
}Tree; //树的孩子表示结构

孩子兄弟表示法:存储孩子结点和兄弟结点。

typedef char ElemType;
typedef struct CSNode{
ElemType data; //该结点数据域
struct CSNode *firsrchild,*right;//指向该结点的第一个孩子结点和该结点的右兄弟结点
}CSNode //孩子兄弟结点数据类型

c语言数据结构学习心得——树的更多相关文章

  1. c语言数据结构学习心得——二叉树

    二叉树 n(n>=0)个结点的有限集合:(五种形态) 1.或者为空二叉树,n=0: 2.或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成.左子树和右子树又分别是一棵二叉树. 3.每个 ...

  2. c语言数据结构学习心得——图

    图G由顶点集V和边集E组成,记为G=(V,E) 图不可为空,一定有顶点集不为空 有向图:有向边(弧)的有限集合 无向图:无向边的有限集合 连通:顶点V到顶点V'有路径 连通分量:无向图中的极大连通子图 ...

  3. c语言数据结构学习心得——查找

    顺序查找(线性查找) 主要用于在线性表中的查找 int Search1(int a[],int n,int key){ ;i<=n;i++){ //注意从1开始 if(a[i]==key)ret ...

  4. c语言数据结构学习心得——排序

    排序:将无序的序列重新排列为有序的序列. 插入类排序 插入类排序:在一个有序的序列中,插入一个新的关键字,知道所有的关键字都插入形成一个有序的序列. 直接插入排序:首先以一个元素为有序的序列,然后将后 ...

  5. c语言数据结构学习心得——队列

    队列 只允许在一端进行插入,在另一端进行删除的线性表 队头(Front):允许删除的一端(队首) 队尾(Rear):允许插入的一端 FIFO:先进先出 不要求从数组首位开始存储队列 #define M ...

  6. c语言数据结构学习心得——栈

    栈(Stack) 只允许在一端进行插入或删除操作的线性表 栈顶(Top):栈中允许进行插入和删除操作的那一端: 栈底(Bottom):固定的,不允许进行插入或删除的另一端 1.栈是受限的线性表,所以自 ...

  7. c语言数据结构学习心得——线性表

    线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...

  8. c语言数据结构学习心得——数据结构基本概念

    1.数据>数据元素>数据项      数据的基本单位是数据元素,数据元素的基本单位是数据项 2.运算的定义->针对逻辑结构 集合:同属于一个集合,无其他关系.(数学上的集合) 线性结 ...

  9. 获奖感言和C语言的学习心得

    获奖感言和C语言的学习心得 自我介绍: 大家好,我的名字叫袁忠,我来自湖南,今年快19岁了,现在是大学一年级,我平时喜欢跑步.打羽毛球,我也喜欢学算法与数学,以及喜欢看一些与计算机有关的书籍,每次我学 ...

随机推荐

  1. STA组件好资料

    http://blog.h5min.cn/zj510/article/details/38824353 http://download.csdn.net/user/zj510/uploads/1 ht ...

  2. 12-EasyNetQ之消息版本控制

    为了能够支持消息版本控制,你需要确保这个必要的组件已配置.最简单的实现是这样的: var bus = RabbitHutch.CreateBus("host=localhost", ...

  3. Hadoop IO 特性详解(1)

    本文结合hadoop : the definitive guide精心而作,包含作者的心血,希望可以帮助大家理解一点hdfs的皮毛,足矣.(charles@xingbod.cn) hadoop本身自带 ...

  4. Tornado 类与类组合降低耦合

  5. Variable hoisting Function hoisting

    Variable hoisting Another unusual thing about variables in JavaScript is that you can refer to a var ...

  6. Chrome,firefox,ie等浏览器空格&nbsp;宽度不一样

    方案一:使用其他字符代替空格 使用(&nbsp:)空格浏览器之间,显示的不一样,对不齐等现象. 解决方案: 用半角空格&ensp:或者全角空格&emsp:就可以了,&e ...

  7. linux上搭建图片服务器

    之前写过一个搭建图片服务器的随笔:https://www.cnblogs.com/xujingyang/p/7163290.html   ,现在回头看看,我去,感觉写的好乱,现在再整一个吧.o(╯□╰ ...

  8. 724. Find Pivot Index 找到中轴下标

    [抄题]: Given an array of integers nums, write a method that returns the "pivot" index of th ...

  9. jqgrid 编辑表格(包含下拉框)

    .1在jqgrid 按钮 <asp:JQGridColumn TextAlign=" DataField="act" Visible="True" ...

  10. 第十八课 Gazebo仿真器

    1.Gazebo概述 在Gazebo中的模拟效果是非常好的. 它的特性 Dynamics Simulation 直接控制物理引擎参数 Building Editor 无需代码即可在Gazebo中创建机 ...