编写函数计算度为i的结点数目_计算机网络知识4

点击蓝字 关注我们

遍历二叉树的应用

1)建立一棵二叉树:

在遍历过程生成结点,建立二叉树的存储结构,链式存储结构

2)统计二叉树中叶子结点的个数

3)由遍历序列恢复二叉树

哈夫曼树及其应用(WPL1、哈夫曼树(Huffman)

最优树:是带权的路径长度最短的树,常用于信息检索;

路径长度:从一个结点到另一结点之间经过的分支数目称为这对结点间的路径长度;

树的路径长度:从树根到每一结点的路径长度之和,用PL表示;

结点带权的路径长度:为从该结点到树根之间的路径长度与结点上权的乘积。

树的带权路径长度:为树中叶子结点带权路径长度之和。

记作:其中:Wk为树中每个叶子结点的权;

Lk为每个叶子结点到根的路径长度。

WPL最小的二叉树就称作最优二叉树或哈夫曼树

1、哈夫曼树的构造过程

例:给定权值7,5,2,4j,构造哈夫曼树。

1)根据给的n个权值(w1w2.········,wn)构造n棵二叉树的集合F=(T1,T2,·······,TnJ,每棵二叉树仅有一个带权为wi的根结点;

2)在森林中选取两棵根结点权值最小的二叉树作为左右子树构造一棵新的二叉树,其根结点的权值为左右子树根结点权值之和。且规定左子树根结点的权值小于右子树根结点的权值;3)将新的二叉树加入到森林F中,去除原两棵权值最小的树;

4)重复2、3步骤,直至F中只剩一棵树为止。

2、哈夫曼编码

哈夫曼编码---利用哈夫曼树构造通讯中的电文编码(前缀码)。例:要传输的电文是[CAS;CAT;SAT;AT),要传输的字符集是:D=(C,A,S,T,;,字符出现的频率分别是W=(2,4,2,3,3

图的基本概念

图(Graph):图G是由两个集合V(G)和E(G)组成的,记为G=(V,E),其中:V(G)是顶点的非空有限集;E(G)是边的有限集合,边是顶点的无序对或有序对:

有向图:有向图G是由两个集合V(G)和E(G)组成的.

其中:V(G)是顶点的非空有限集,E(G)是有向边(也称)的有限集合,弧是顶点的有序对,记为,v,w是顶点,v为弧尾,w为弧头,(vw)=(W,v)。

无向图:无向图G是由两个集合V(G)和E(G)组成的,

其中:V(G)是顶点的非空有限集,E(G)是边的有限集合,边是顶点的无序对,记为(v,w)或(wv),并且(vW)=(Wv)。

图的相关术语

权:与图的边或弧相关的数叫权(Weight),可以表示从一个顶点到另一个顶点的距离或耗费;带权的图叫网;

子图:图G(V,E)和图G’(V’,E’),若V’sv,E’SE,则称G’为G的子图;

顶点的度:无向图中,顶点的度为与每个顶点相连的边的数目;

有向图中,顶点的度分成入度与出度;

入度:以该顶点为头的弧的数目;

出度:以该顶点为尾的弧的数目;

路径:路径是顶点的序列V=ViO,Vi1…···Vin,满足(Vij-1,Vij)EE或EE,(1

简单路径:除第一个和最后一个顶点外,序列中其余顶点各不相同的的路径为简单路径;第一个与最后一个顶点相同的简单路径为回路;

连通图:在无向图中,若从Vi到Vj存在路径,则称Vi到Vj是连通的;若在顶点集合V中每一对不同的顶点Vi到Vj都连同,则称G为连通图;

强连通图:对于有向图,若从顶点Vi到Vj和百度文库从Vj到Vi之间都有路径,则称这两个顶点是强连通的;对于有向图中任何一对顶点都是强连通,则此图为强连通图。

邻接表

邻接表是图的一种链式存储结构。在邻接表中,对图中的每个结点建立一个单链表。第i个单链表中的结点表示依附于顶点Vi的边(有向图中指以Vi为尾的弧).

在边少的情况下,用邻接表比邻接矩阵节省存储空间。

1、1)深度优先遍历(DFS)

从图的某一顶点VO出发,访问此顶点;然后依次从VO的未被访问的邻接点出发,深度优先遍历图,直至图中所有和VO相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止。

2)广度优先遍历(BFS)

从图的某一顶点VO出发,访问此顶点后,依次访问VO的各个未曾访问过的邻接点;然后分别从这些邻接点出发,广度优先遍历图,直至图中所有已被访问的顶点的邻接点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止。

2、单源最短路径一般情况,称出发点为源点;其余为终点;单源最短路径提出的问题:从有向网的源点到其他各终点是否有路径?最短路径是什么?最短路径的长度是多少?

当然,从源点到终点存在三种情况:

1)无路径;

2)只有一条路径,即为最短路径;

3)有几条路径,其中一条为最短路径。

思想:先找出从源点VO到各终点Vk的直达路径(VO,Vk),即通过一条弧到达的路径;从这些路径中找出一条最短的路径(VO,u),然后对其余各条路径进行适当调整:若在图中存在弧(u,Vk),且(VO,u)+(u,Vk)的权小于(VO,Vk)的权,则以路径(VO,u,Vk)代替(VO,Vk);在调整后的各条路径中,在找出长度最短的路径,依次类推。

3、为确定记录在表中的位置,需和给定值进行比较的关键字的个数的数学期望值叫查找算法的平均查找长度

哈希函数/哈希表的基本概念

哈希函数:在记录的关键字与记录的存储地址之间建立的一种对应关系,是可以根据关键字的值而直接计算出元素所在位置的函数,可表示H(KEY)。

哈希表:哈希表是一种存储结构,是能用散列技术进行查找的表,也叫散列存储。通过哈希函数和解决冲突的办法把键值存放在哈希表中。

采用哈希技术主要目标是提高查找效率,要求缩短查表和填表的时间.

哈希查找:又叫散列查找,利用哈希函数进行查找的过程。

冲突:两个不同的关键字K1和K2计算出相同的存储位置的现象称为冲突,K1和K2互为同义词。

使用了监视哨,在查找过程中,不用每一步都去判断是否查找结束。找到:返回元素在线性表中的存储位置;未找到:返回0。

对分查找概念:基本思想:对有序文件,进行查找,先找“中间记录”,进行比较,根据不同情况,逐步缩小范围,直到找到或确认找不到该记录为止。

分块查找:是顺序查找的一种改进方法,就是把被查找的表分成若干块,每块中记录的存放顺序是无序的,但块与块之间必须按关键字有序。即第一块中任一记录的关键字都小于第二块中任一记录的关键字,而第二块中任一记录的关键字都小于第三块中任一记录的关键字,依此类推。

二叉排序树的删除算法void DeleteBT(struct TreeNode*t,*p,*f)f int fag=0;struct TreeNode*s;if (p->Lchild == NILL) s= p->Rchild;else if ( p->Rchild == NILL) s= p->Lchild;else q=p;s=p->Lchild;while(s->Rchild!=NILL)fq=s;s=s->Rchild;if (q== p) q->Lchild=s-Lchild;else q->Rchild=s->Lchild;p->data=s->data;free(s);fag=1;] if (fag == 0) ( if (f== NILL) t=S;else if (f->Lchild == p) f->Lchild = S;else f->Rchild =s;free(p);]]

二叉排序树查找

二叉排序树或者是一棵空树;或者是具有如下特性的二叉树:

(1)若它的左子树不空,则左子树上所有结点的值均小于根结点的值;

(2)若它的右子树不空,则右子树上所有结点的值均大于根结点的值;

(3)它的左、右子树也都分别是二叉排序树。

二叉排序树的生成

对于任意的一组数据元素序列(R1,R2,…,Rn,生成二叉排序树的过程如下:

1)令R1为二叉排序树的根结点;

2)若R2

3)R2,··,Rn结点插入方法同上。

解决冲突的方法

1)开放定址法(线性探测再散列)

2)平方探测再散列(二次探测法)

3)随机探测再散列

4)链地址法

82cbeca0a5334fde6dc0173428ae2fd1.gif

你们点点“分享”,给我充点儿电吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值