微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

csp之数据结构2

1.详解树形结构

树形结构只有单向连接关系,以任何一个节点为根,用节点与根的距离来划分子节点。树同时也没有图那样的结构,他是不能从一个点走一圈再回去的。

去掉一个根节点,他就成了森林;加上根就成了一棵树。一个数必须有一个根节点。

接下来说节点:

父节点就是前驱,子节点就是后继,兄弟节点就是同为一个节点的后继的节点,祖先点就是它最上面的一个父节点。

一个节点出发,自上而下,线段能到另一节点,这个线就叫路径。树上的路径的长度是路径上的节点个数减1。

有序树是各个子树不能互换,无序是可以换的。

度就是这个节点子节点的个数。叶子结点德度是1,这棵树德度是各节点的度的最大值。树的深度就是树的层数,是从上往下;高度则是从下往上数的。

那么我们经常提到的二叉树是啥?二叉树就是每个节点最多只能有两个子节点,而且是一种有序树。二叉树可以空,或者只有根节点,又或者左子树或右子树是空的,又或者是个满二叉树——除了叶子结点以外都有两个子节点的二叉树。

我们还会提到一个完全二叉树,是除了靠右边的叶子节点不满,其他的是全满的,这个叫完全二叉树。完全二叉树和满二叉树缝合起来交完满二叉树,是每个节点都有两个孩子的。

接下来是概念:

1,二叉树的第i层上最多有2^(i-1)个节点。

2,深度为k的二叉树最多有(2^k)-1个节点。

3,对任意一个二叉树,如果叶子节点数是n0,度是2的节点数为n2,则满足n0=n2+1。

4,具有n各节点的完全二叉树的深度为floor(向下取整)(log₂n)+1。

5,对一颗n个节点的完全二叉树,对任意一个编号为i的节点有:

如果i=1,则它是根节点;如果i>1,则它的父节点编号为i/2;如果2i>n,也就说i是叶子节点;否则左边子节点编号是2i;如果2i+1>n,他没有右子节点,否则右子节点编号为2i+1。

二叉树的存储用链表就可以了,也可以用结构体。

二叉树还有三种遍历方式:先序遍历(根左右),中序遍历(左根右),后序遍历(左右根)。

2,图形结构详解

图就是多对多的数据结构,可以理解为一个地图。

之前我开过专题讲图的搜索和图的基本算法,大家可以看一看。

接下来将一些名词:

联通,指两个节点之间有边连着。

图分有向图和无向图两种,有向图的边是有特定方向的。

图里面存在环形,可以从一个点回到一个点。复杂图是有重合的边或者是自己和自己组成一个环。

另外图的边可以带有权值,类似于距离。

那么我们经常见的完全图是什么?完全图是一个所有点都联通的图,能从任意一个点走到目标点。一个n阶的无向完全图有n+(n-1)……+1,有向图就是无向图*2.

路径是顶点之间的一条边,路径上点的数目-1就是路径的长度。除了起点和终点可以一样,其他都不一样的路径,或者对于有向图来说起点等于重点的路径,叫简单路径或者叫环。

一个n个点的简单无向联通图至少有n-1条边,最多有n*(n-1)/2条边。

图的度是边数的两倍,一个点的度是连接这个点的边的个数。

存图有两种方法:邻接矩阵(把每个点用一个二位数组存起来,有边是1)和链表(昨天讲过,记得吗)

邻接矩阵不能有效的存储一个稀疏图,但是用链表(邻接表)就能行。

今天先讲到这里,有问题可以看我关于图发的那几篇专题。拜拜!

原文地址:https://www.jb51.cc/wenti/3285564.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐