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

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

度为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. Spring使用标签注解来简化xml书写

    一.步骤 在配置文件中,引入context命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xm ...

  2. Dom对象与jQuery对象的转换

  3. 我使用的网址--Hadoop

    1.Hadoop 官网下载:http://hadoop.apache.org/releases.html 各版本网址:http://mirror.bit.edu.cn/apache/hadoop/co ...

  4. SqlServer-truncate && delete && drop 的区别

    有些人在删除表的所有记录的时候,喜欢这样来——不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除.但这种方法是不可取的,正确的应该使用 TRUNCATE TABLE tb_name ...

  5. Hadoop 使用Combiner提高Map/Reduce程序效率

    众所周知,Hadoop框架使用Mapper将数据处理成一个<key,value>键值对,再网络节点间对其进行整理(shuffle),然后使用Reducer处理数据并进行最终输出. 在上述过 ...

  6. Mybatis——缓存机制

    MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.缓存可以极大的提升查询效率. MyBatis系统中默认定义了两级缓存. 一级缓存和二级缓存. 1.默认情况下,只有一级缓存( ...

  7. Model View Controller (MVC) Overview

    By Rakesh Chavda on Jul 01, 2015 What is MVC?Model View Controller is a type of user interface archi ...

  8. what is diff. b/w app state & session state

    Application state is a data repository available to all classes in an ASP.NET application. Applicati ...

  9. XE中FMX操作ListBox,添加上千条记录(含图片)

    我之前是想在ListBox的每个Item上添加一个图片,Item上所有的内容都是放在Object里赋值,结果发现加载一百条记录耗时四五秒: procedure TMainForm.AddItem; v ...

  10. IOC AOP 设计模式

    IOC AOP 不是什么技术而是一种设计模式  学习 IOC AOP 其实是在学习一种思想. 1.IOC IOC其实是 将对象的创建和获取提取到外部.由外部IOC容器提供需要的组件. 看下面代码: p ...