C++:树


树的概念:

所谓“树”是输就结构的一种,树大概可以分为两大类: 有根树无根树 有根树使有一个确定的根节点,反之为无根树

· 子节点:从树根开始,通过树边向下扩展的节点

· 中间节点:两个节点之间的节点

· 叶节点/叶子:不能再向下延伸的节点

对于有根树而言:

· 祖先:从根结点到该结点的路径上的所有结点

·兄弟:同一双亲结点的孩子结点间互称兄弟结点

·节点的度:一个节点含有的子树的个数称为该节点的度

·树的高度:数中所有结点的层次的最大值

·堂兄弟:父节点在同一层的节点互为堂兄弟

·子树:以某节点为根的子树中任一节点都称为该节点的子树

·森林:由两棵以上互不相交的树的集合称为森林

树的分类:


·无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树;

·有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;

·二叉树:每个节点最多含有两个子树的树称为二叉树;

·完全二叉树:对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树,其中满二叉树的定义是所有叶节点都在最底层的完全二叉树;

·平衡二叉树/AVL树:当且仅当任何节点的两棵子树的高度差不大于1的二叉树;

·霍夫曼树(用于信息编码):带权路径最短的二叉树称为哈夫曼树或最优二叉树;

·排序二叉树/二叉查找树:也称二叉搜索树、有序二叉树);

·B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树

树的性质:

1. 对于有根树而言,除根结点以外,其余节点仅有一个父节点

2. n个节点的树仅有n-1条边

3. 树不存在换的连通图

4. 树的任意两个节点之间仅有议题哦简单路径

树的储存

1.有根树的父亲表示法:

这种方法类似于并查集,使用了(对于有根树而言,除根结点以外,其余节点仅有一个父节点)的性质。首先创建一个数组,数组下标代表节点,记录的数据表示其父节点

例:

fath[100];
void link (int i,int j)
{
fath[x] = y;
}
int main(){ link(1,-1); //父节点不存在父亲
link(2,1); //表示2节点的父亲为1
link(3,1);
link(4,3);
return 0;
}

其表示的树如下:

有根树的图存储方法:


树是一种特殊的图,所以也可以用图的方法来储存:邻接矩阵邻接表

1.邻接矩阵:定义一个n*n的二维数组,类型既可以是bool也可以是int,下面张图以int类型展示了如何用邻接矩阵来储存有根树:



用邻接矩阵储存的代码如下:

int map[5][5];
void link(int x,int y)
{
map[x][y] = 1;
}
2.邻接表:

代码如下:

int m;
int f[100];
int t[100];
int n[100];
void link(int x,int y){
t[m++] = y;
n[m] = f[x];
f[x] = m;
}

使用std::vector代码如下:

vector<int>l[100];
void link(int x,int y)
{
l[x].push_back(y);
}

希望对你有帮助~~~

C ++:树的更多相关文章

  1. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  2. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  3. 再讲IQueryable<T>,揭开表达式树的神秘面纱

    接上篇<先说IEnumerable,我们每天用的foreach你真的懂它吗?> 最近园子里定制自己的orm那是一个风生水起,感觉不整个自己的orm都不好意思继续混博客园了(开个玩笑).那么 ...

  4. HDU1671——前缀树的一点感触

    题目http://acm.hdu.edu.cn/showproblem.php?pid=1671 题目本身不难,一棵前缀树OK,但是前两次提交都没有成功. 第一次Memory Limit Exceed ...

  5. 算法与数据结构(十一) 平衡二叉树(AVL树)

    今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,A ...

  6. [C#] C# 知识回顾 - 表达式树 Expression Trees

    C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...

  7. bzoj3207--Hash+主席树

    题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. ...

  8. bzoj1901--树状数组套主席树

    树状数组套主席树模板题... 题目大意: 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[ ...

  9. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  10. jquery-treegrid树状表格的使用(.Net平台)

    上一篇介绍了DataTable,这一篇在DT的基础之上再使用jquery的一款插件:treegrid,官网地址:http://maxazan.github.io/jquery-treegrid/ 一. ...

随机推荐

  1. 纯CSS实现“流星赶月”,祝大家中秋节快乐

    明天就是中秋节了,就想着用CSS画一个月亮送给园友们吧.但是就画一个月亮也太简单了些,于是便加了一些星星点缀以及流星坠落的效果.这篇文章就用纯CSS为大家实现一个"流星赶月"的效果 ...

  2. Java注解系统学习与实战

    背景 为什么要再次梳理一下java注解,显而易见,因为重要啊.也是为研究各大类开源框架做铺垫,只有弄清楚Java注解相关原理,才能看懂大部分框架底层的设计. 缘起 注解也叫做元数据,是JDK1.5版本 ...

  3. winfrom程序只启动一个exe进程

    private static void KillProcess() { Process process1 = Process.GetCurrentProcess(); //获得当前计算机系统内某个进程 ...

  4. 2.第一篇 k8s组件版本及功能简介

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483772&idx=1&sn=a693d8a9 ...

  5. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(24)-Fiddler如何优雅地在正式和测试环境之间来回切换-中篇

    1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考. 2.实际工作场景 2.1问题场景 (1)已发布 ...

  6. C/C++ 关于默认构造函数

    前言: 在C++中,对于一个类,C++的编译器都会为这个类提供四个默认函数,分别是: A() //默认构造函数 ~A() //默认析构函数 A(const A&) //默认拷贝构造函数 A&a ...

  7. vue3中pinia的使用总结

    pinia的简介和优势: Pinia是Vue生态里Vuex的代替者,一个全新Vue的状态管理库.在Vue3成为正式版以后,尤雨溪强势推荐的项目就是Pinia.那先来看看Pinia比Vuex好的地方,也 ...

  8. PHP全栈开发(八):CSS Ⅰ 选择器

    直到目前为止,我们把从HTML中的数据是如何通过PHP到服务器端,然后又通过PHP到数据库,然后从数据库中出来,通过PHP到HTML的整个过程通过一个案例过了一遍. 可以说,这些才刚刚开始.下面我们开 ...

  9. SpringSecurity 在 SSM架构中的使用

    SpringSecurity - SSM SpringSecurity 对比 Shiro SpringSecurity的特点: 能和 Spring无缝贴合 能实现全面的权限控制 专门为 Web开发而设 ...

  10. 如何用AR Engine环境Mesh能力实现虚实遮挡

    在AR应用中,用户最不希望看到不真实的穿模现象发生,如虚拟形象部分身体陷入墙壁之中,或者未碰到墙壁却已无法移动,这种不真实的交互十分影响用户体验.那如何才能让避免虚拟物体的穿模问题呢?使用AR Eng ...