首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DS--路径和

题目描述 计算一棵二叉路径总和,即求赫夫曼路径和。 已知一棵二叉的叶子值,该二叉案路径和APL等于叶子值乘于根节点到叶子的分支数,然后求总和。...如下图中,叶子都用大写字母表示,值对应为:A-7,B-6,C-2,D-3 路径和 = 7*1 + 6*2 + 2*3 + 3*3 = 34 本题二叉的创建参考前面的方法 输入 第一行输入一个整数...t,表示有t个二叉 第二行输入一棵二叉的先序遍历结果,空用字符‘0’表示,注意输入全是英文字母和0,其中大写字母表示叶子 第三行先输入n表示有n个叶子,接着输入n个数据表示n个叶子的值,值的顺序和前面输入的大写字母顺序对应...以此类推输入下一棵二叉 输出 输出每一棵二叉路径和 输入样例1  2 xA00tB00zC00D00 4 7 6 2 3 ab0C00D00 2 10 20 输出样例1 34 40...先序遍历,左右孩子都是空的说明这个是叶子节点,读取权重进来,乘以叶子节点深度,累加即可。

15010
您找到你想要的搜索结果了吗?
是的
没有找到

hdu 3367(Pseudoforest ) (最大生成)

给出一个图,要求出最大的pseudoforest, 所谓pseudoforest就是指这个图的一个子图,这个子图的每个连通分量中最多只能有一个环, 而且这个子图的所有权值之和最大。...过程类似与kruskal求最小生成,千万不要直接求最大生成,一开始时我想到的方法是用kruskal算法求出这个图的最大生成, 然后给每一棵数再加上一条最大的边,构成一个环。...正确的做法和求最大生成很类似,但是有一点改变, 因为每个连通分量允许有一个回环, 所以,我们可以在进行合并两颗时,要判断这两颗是否有回环,如果两个都有回环,那么明显不可以合并这两颗, 如果只有一棵有回环...代码:  1 // hdu 3367 最大生成 2 // author: Gxjun 3 // date: 2014/11/18 4 #include 5 #include

94440

-- 哈夫曼,与它的那张哈夫曼编码表

哈夫曼 先来看几个概念: ? 这是一个二叉的图。 这棵的路径长度 = 5+15+40+30+10 = 100....这颗路径长度(WPL)= 51 + 152 + 403 +304 + 10*4 = 315 通过调整使得这棵的WPL最小时,那棵就是哈夫曼。...哈夫曼编码 这里要提一下哈夫曼编码表: 哈夫曼当然是一种,不过这种树有些特殊之处。哈夫曼编码呢,是根据哈夫曼规则生成的编码!...哈夫曼构造步骤 根据给定的n个值{W1,W2,…,Wn}构成n棵二叉的集合F={T1,T2,…Tn},其中每棵二叉Ti只有一个权为Wi的根结点,其左右子树均为空。...在F中选取2棵根结点最小的 作为左右子树 构造一棵新的二叉,且新的二叉的根结点左右子树根结点值之和。 在F中删除这2棵子树,同时将新得到的二叉加入F中。

1K20

Prim算法生成最小生成

最小生成 对于一个图,我们可以把它转换成一颗(联通图)或者是多棵(非联通)。 对于一个值的联通图,最小生成就是它的所有生成中边值和最小的生成。...Prim算法  Prim算法就是一种用来生成最小生成算法。 由一个值的联通图到一个最小生成的过程,其实就是从图的所有边中挑出一部分边用来组成的过程,所以关键在于如何挑选边。...对于Prim算法,它的具体操作是这样的: 对于给定的一个起点节点(Prim算法必须给它一个起点),先找出这个节点连接的所有节点所组成的边中值最小的边,作为最小生成的第一条被挑选出来的边,现在我们有两个节点了对吧...然后以这两个节点为基础,继续找出这两个点连接的所有节点所组成的边中值最小的边,同时这个查找过程,需要注意不能找已经连起来的节点,具体体现在代码实现上就是每找到节点就标记一下。 看过程图:

14930

最小生成(Kruskal算法和Prim算法

而今天我们要说一个非常实用的算法——最小生成的建立!这是图论中一个经典问题,可以使用Kruskal和Prim两种算法来进行实现!...1 什么是最小生成 在给定一张无向图,如果在它的子图中,任意两个顶点都是互相连通,并且是一个树结构,那么这棵叫做生成。当连接顶点之间的图有权重时,权重之和最小的树结构为最小生成!...最小生成 如上图所示,一幅两两相连的图中,找到一个子图,连接到所有的节点,并且连接边的权重最小(也就是说边的数量也是最小的,这也保证了其是树结构). 2 Kruskal算法(克鲁斯卡算法) Kruskal...算法是一种贪心算法,我们将图中的每个edge按照权重大小进行排序,每次从边集中取出权重最小且两个顶点都不在同一个集合的边加入生成中!...4 资源分享 以上完整代码文件(C++版),文件名为:最小生成(Kruskal算法和Prim算法).cpp,请关注我的个人公众号 (算法工程师之路),回复"左神算法基础CPP"即可获得,并实时更新!

4.7K30

最小生成-Prim算法和Kruskal算法

Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成。...意即由此算法搜索到的边子集所构成的中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的值之和亦为最小。...下面对算法的图例描述 image.png 3.简单证明prim算法 反证法:假设prim生成的不是最小生成 1).设prim生成为G0 2).假设存在Gmin使得cost(Gmin)<cost(G0...1.概览 Kruskal算法是一种用来寻找最小生成算法,由Joseph Kruskal在1956年发表。...显然T应该包含,否则,可以用加入到T中,形成一个环,删除环上原有的任意一条边,形成一棵更小值的生成。而T-{},是G'的生成

3.7K100

最小生成算法:Kruskal 与 Prim算法

最小生成 连通图中的每一棵生成,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成就不再连通;反之,在其中引入任何一条新边,都会形成一条回路。...贪心算法不是对所有的问题都能得到整体最优解(也就是说这两种算法不是万能的)。 并且 最小生成是不唯一的!...核心:每次迭代时,选出一条具有最小值,且两端点不在同一连通分量上的边,加入生成。...除了 Kruskal 算法以外,普里姆算法(Prim 算法)也是常用的最小生成算法。...总的来说,Prim 算法是 以点为对象,挑选与点相连的最短边来构成最小生成。而 Kruskal 算法是以边为对象,不断地加入新的不构成环路的最短边来构成最小生成

1.9K20

算法实战】生成窗口最大值数组

本文字数:2000字 阅读本文大概需要:5 分钟 做算法题了,题的难度我们分为“士,尉,校,将”四个等级。这个算法题的模块是篇幅比较小的那种模块。...首先是给出一道题的描述,之后我会用我的想法来做这道题,今天算是算法题的第一道题,先来试试水。...显然,max=5左边的窗口实际上是不必再遍历的了,也就是它不可能会是窗口的最大值。 而 max = 5 右边的 4 有可能会是窗口的最大值吗?...由于窗口还会一直向右移动,所以 max = 5 右边的窗口元素还是有可能是某一个窗口的最大值的。 因此,我们可以用一个双向的队列,来记录有可能成为窗口最大值的下标,注意,这里指的是有可能。...像刚才的 max = 5 前面的 1,3 就不可能成为窗口的最大值了,而右边的4还是有可能成为窗口的最大值的。

1.3K20

Heavy Transportation-poj1797(dijkstra 或最大生成

id=1797) 大意: 要从城市 1 到城市 N 运送货物,有 M 条道路,每条道路都有它的最大载重量,问从城市 1 到城市 N 运送最多的重量是多少。...其实题意很简单,就是找一条 1–>N 的路径,在不超过每条路径的最大载重量的情况下,使得运送的货物最多。...一条路径上的最大载重量为这个路径上值最小的边; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26...a:b) using namespace std; int n,m,v[1010],maps[1010][1010],d[1010];//此时 d 表示 1 到每一个点的能通过的最大的重量 int...int i,j,k; for(i=1;i<=n;i++){ v[i]=0; d[i]=maps[1][i];//这个时候 d 不代表最短路径,而是从 1 到 n 的最大承载量

29220

最小生成的Kruskal算法

定义: 一个有 n 个结点的连通图的生成是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。...[1] 最小生成可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。...Kruskal算法简述: 假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点...之后,从网的边集 E 中选取一条值最小的边,若该条边的两个顶点分属不同的,则将其加入子图,也就是说,将这两个顶点分别所在的两棵合成一棵;反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条值最小的边再试之...forest.unionset(parent1, parent2) pass def Kruskal(nodes, edges): ''' Kruskal 无向图生成最小生成

1.9K20

算法】二叉最大深度

题目难度:简单[1] 题目描述: 给定一个二叉,找出其最大深度。 二叉的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。...测试用例: 示例: 给定二叉 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 解题分析及思路: 本题可以采用分治法...分:可以将左右两个节点拆分为同等的子集 治:判断终止条件并计算 合:根据左右节点返回的最大深度来计算当前节点的子树的最大深度 代码分析: 分的操作:将左右两个节点拆分。...if root == nil { return 0 } 合的操作:根据左右节点返回的最大深度来计算当前节点的子树的最大深度,如果左子节点的子树深度大于右子节点的子树深度,返回左子节点的子树深度 +

28920

图的最小生成算法

首先,我们要知道,图的最小生成是针对于有权图而言的,笔者的上一篇文章只介绍了无权图,其实有权图和无权图唯一的区别就是有权图的边是有权值的,不同的边值可以不同,对于无权图我们可以把它看成所有边的值都相等的有权图...这是百度百科上的一张有权图的图片,和无权图相比多了边的值。Ok,那么最小生成算法是什么呢?...求最小生成算法主要有两种:克鲁斯卡尔(Kruskal)算法和普里姆(Prim)算法。...以上面那个无向图为例,我们来模拟一下最小生成的构造过程: ? 这是笔者在纸上模拟的过程,到最后,生成的最小生成值之和为 15 。...count++; /* * 更新最小生成的总值:最小生成的总值等于最小生成原来的值 * 加上刚刚加入最小生成的顶点到最小生成的距离

2.6K20
领券