01-(2)数据结构-树

数据结构——树

标签: 数据结构

2014-12-07 15:46 972人阅读 评论(0) 收藏 举报

 分类:

数据结构(8) 

一、树的定义

树是n(n>=0)个结点的有限集。n=0时称为空树,在任意一颗非空树:1、有且仅有一个特定的根结点。2、当n>1时其余结点可分为m(m>0)个互不相交的有限集T1、T2、.....Tm,其中每一个集合本身又是一棵树,并且称为根的子树。

二、结点的度,拥有的子树称为结点的度

如上图结点A的度是2,结点B的度是1,结点C的度是2,结点E的度是3,结点G的度是0

度为0的节点称为叶子结点,度不为0的结点称为分支结点。

三、结点之间的关系

如上图,结点的子树称为根的孩子,该结点称为孩子的双亲。

同一个双亲的孩子之间称为兄弟。

某结点为根的子树中任意一个结点都称为该结点的子孙。

四、树的深度

结点的层次从根开始定义,树种结点的最大层次称为树的深度或 高度。

如果将树种的结点的各个子树看成从左到右是有序的,不能互换的,则称该树为有序树,否则称为无序树。

五、树的存储结构--双亲表示法

[cpp] view plain copy

print?

  1. typedef int TElemType;
  2. typedef struct PTNode{ //结点结构
  3. TElemType data;
  4. int parent;
  5. }PTNode;
  6. typedef struct{ //结点数组
  7. PTNode nodes[MAX_TREE_SIZE];
  8. int r, n;   //根的位置和结点数
  9. }PTree;

这样的结构很容易找到双亲,如果要找到结点的孩子就需要遍历整个结构。我们可以再增加一个存放左边孩子的域来解决,存储结构的设计是一个非常灵活的过程。一个存储结构设计的是否合理,取决于基于该存储结构的运算是否合适,是否方便,时间复杂度好不好等。

六、树的存储结构--孩子表示法

我们知道每个结点的孩子的个数是不同的,所以我们要存储孩子的地址就有两种方法,第一种就是指针域的个数等于树的度,第二种就是指针域的个数等于该结点的度。

[cpp] view plain copy

print?

  1. #define MAX_TREE_SIZE 100
  2. typedef struct CTNode{
  3. int child;
  4. struct CTNode *next;
  5. } *ChildPtr;
  6. typedef struct{
  7. TElemType data;
  8. ChildPtr firstchild;
  9. }CTbox;
  10. typedef struct{
  11. CTbox nodes[MAX_TREE_SIZE];
  12. int r, n;
  13. }CTree;

七、树的存储结构--双亲孩子表示法

八、树的存储结构--孩子兄弟表示法

任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的。因此,我们设置两个指针,分别指向该结点的第一个孩子和此结点的右兄弟。

时间: 2024-08-01 11:14:28

01-(2)数据结构-树的相关文章

数据结构--树(定义与存储结构)

树基本定义 树的定义 数是具有n个节点的有限集.如图即是一个树形结构. 节点分类 节点的度:一个节点拥有的子节点即成为节点的度,比如A节点,有B和C两个子节点,那么A节点的度=2. 叶节点(终端节点):没有子节点的节点,比如G.H.I.... 如图: 节点间关系 孩子节点:某一个节点的子节点称为孩子节点.比如B.C节点是A节点的孩子节点. 双亲节点:与孩子节点相反.比如,A节点是B.C的双亲节点. 兄弟节点:同一个双亲节点的孩子节点,之间称为兄弟节点.比如,B.C为兄弟节点. 如图: 树的存储结

数据结构--树的一些计算

先解释一下一些最基本的概念 结点的孩子结点个数即为该结点的度.度为0的结点叫叶子结点.处在树的最顶端(没有双亲)的结点叫根结点. 介绍一下公式 k:总度数k+1:总节点数 为什么总节点数肯定比总度数多1呢?其实很简单可以解释,度可以看作节点与节点之间的线,多1就是显而易见的 设该二叉树总结点数为N,叶子结点个数为n0,度为1的结点个数为n1.度为2的节点个数为n2下面可得两等式:(1) N = n2 + n0 + n1;依据:很显然,二叉树总结点数等于度分别为0,1,2的结点个数总和.(2) N

数据结构---树、二叉树、森林

1.基本术语: 度:有两种度"结点的度"与"树的度".结点的度指的是一个结点子树的个数:树的度是指树中结点度的最大值. 叶子结点:指的是没有子树的结点. 层:树是有层次的,一般根结点为第0层.规定根结点到某结点的路径长度为该结点的层数. 深度:树中结点的最大层数 兄弟:同一双亲的结点,互为兄弟 堂兄弟:双亲在同一层次的结点,互为堂兄弟 祖先:从根结点到该结点的路径上的所有结点都是该结点的祖先. 子孙:以某一结点为根的子树上的所有结点都是该结点的子孙 森林:n棵互不相

数据结构——树状数组

我们今天来讲一个应用比较广泛的数据结构——树状数组 它可以在O(nlogn)的复杂度下进行单点修改区间查询,下面我会分成三个模块对树状数组进行详细的解说,分别是树状数组基本操作.树状数组区间修改单点查询的实现.树状数组查询最值的实现 一. 树状数组一般分为三种操作,初始化.修改.查询 在讲基本操作之前,我们先来看一张图 这张图就是树状数组的存储方式,对于没有接触过树状数组的人来说看懂上面这张图可能有些困难,上图的A数组就是我们的原数组,C数组则是我们需要维护的数组,这样存储能干什么呢,比如我们在

数据结构 树(下)

数据结构 树(下) 一.概述 AVL树.伸展树.红黑树搜索树算法保证最坏情况或者一系列操作情况下,搜索.插入和删除的操作的时间复杂度是O(logn).本文主要内容包含:平衡搜索树中的AVL树.伸展树.(2,4)树.红黑树 和(a,b)树.B树等实际运用的树数据结构. 二叉搜索树的删除 二.AVL树 1.基本知识 1.AVL树是维持对数O(logn)的高度的特殊二叉搜索树.“高度”指根节点到叶子节点最长路径上的节点的数量.“None”的孩子的高度是0,叶子节点的高度是1,父节点是叶子节点的高度加1

数据结构 树(上)

数据结构 树(上) 一.概述 主要内容包含树的基本概念.二叉树(平衡二叉树.完全二叉树.满二叉树).搜索树(二叉搜索树.平衡搜索树.AVL树.伸展树.(2,4)树.红黑树).(a,b)树.B树等实际运用的树数据结构 二.基本知识(树的定义和属性) 1.树(非线性数据结构)运用于一些算法实现的效率会比线性数据结构(基于数组的列表和链表)快,广泛运用于文件系统目录结构.图形用户界面.MySQL数据库索引.网站.路由协议和其他计算机系统中 2.树T定义为存储一系列元素的有限节点集合,这些节点具有 pa

算法数据结构01 /算法数据结构概述

目录 算法数据结构01 /算法数据结构概述 1. 算法 2. 评判程序优劣的方法 3. 时间复杂度 4. 数据结构 5. python数据结构性能分析 6. 总结 算法数据结构01 /算法数据结构概述 1. 算法 算法概述 算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务.一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用. 算法是独立存在的一种解决问题的方法和思想. 对于算法而言,实

数据结构 - 树 复习(不详细)

数据结构 - 树 首先回忆一下树的术语 节点的度:一个节点含有的子树的个数称为该节点的树 树的度:一棵树中,最大的节点的度称为树的度 节点的层次:从根开始定义,根为第一层(有时候定义为第0层) 高度:对于任意节点n,n的高度为n到一片树叶的最长路径的长度,所有树叶的高度为0 树的遍历 前序遍历:先访问根,然后访问左右子树 中序遍历:先访问左子树,然后访问根,最后访问右子树 后序遍历:先访问子树,然后访问根 层序遍历:先访问离根节点最近的节点,按层遍历 #include<iostream> us

第五章数据结构--树--学习小结

这两周我们主要学到了有关树和二叉树的用法,掌握了二叉树的遍历的基本操作,但是对一些具体题目来说,还是觉得有点难以上手. 树的介绍 1. 树的定义 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点: (01) 每个节点有零个或多个子节点:(02) 没有父节点的节点称为根节点:(03) 每一个非根节点有且只有一个父节点:(04) 除了根节点外,每个子节点可以分为多个不相交的子树. 2. 树的基本术