首页 > 其他分享 >C ++:树

C ++:树

时间:2022-11-23 16:12:34浏览次数:38  
标签:结点 ++ int link 二叉树 根树 节点

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);
}

希望对你有帮助~~~

标签:结点,++,int,link,二叉树,根树,节点
From: https://www.cnblogs.com/demc/p/16918592.html

相关文章

  • C++ 判断闰年简单代码
    闰年闰年分为普通闰年和世纪闰年1582年以来的置闰规则:普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。世纪闰年:公历年份是整百数的......
  • 周六900C++班级-2022-11-19 01背包
    背包问题关系图  问题描述若有N件物品和一个最多能装重量为W的背包,一个物品只有两个属性:重量和价值。第i件物品的重量是weight[i],得到的价值是value[i]。假......
  • 用汇编的眼光看C++(之 总结篇)
       早在八月份的时候,就陆陆续续写了二十多篇用汇编语言看C++的博客内容。在此为了做一个概括,也为了朋友们看起来更方便,我们利用这么一篇博客对所有的文章做一个总结。如......
  • socket通信编程C++实现
    socket提供了套接字,以方便我们想读取文件一样进行网络进程间的数据通信。在网络通信中,套接字一定是成对出现的。一端的发送缓冲区对应对端的接收缓冲区。我们使用同一个文......
  • 数据结构初阶--顺序表(讲解+C++类模板实现)
    顺序的概念与结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。一般分为两种:静态顺序表和动......
  • 随想录(写给自己的C++编程规范)
       对于我这样一个C语言的程序员来说,编写C++的机会其实不太多。但是我还是比较喜欢写C++语言,原因主要有几个方面:(1)自己学C++语言的时间比较长了,也比较了解,如果从大一的时......
  • ROS_C++_涉及的代数以及C++代码库
    基本线性代数库Ceres、Eigen、Sophus、G2O基本线性代数子程序,BasicLinearAlgebraSubprograms,是一个API标淮,用以规范发布基础线性代数操作的数值库Netlib用......
  • C++虚拟新生信息管理系统
    C++虚拟新生信息管理系统实验七综合实验虚拟新生信息管理系统(4学时)一、实验目的1)巩固和加深学生对C++课程的基本知识的理解和掌握;2)掌握C++编程和程序调试的基本技......
  • 用汇编的眼光看C++(之class构造、析构)
       前面我们讨论基本上都是C语言的内容,还没有真正触及到C++的相关知识。从这篇博客之后,我们将会更多触及类的内容。类的属性很多,今天我们讨论主要就是构造函数、析构函......
  • 用汇编的眼光看C++(之算术符重载)
       算术符重载是类的有一个特性,但是每个人使用的方法不一样。用的好,则事半功倍;但是如果不正确的使用,则会后患无穷。   (1)简单算术符介绍   那什么是算术符重载......