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

求二叉树的深度和宽度

1 二叉树的深度 题目: 输入一个二叉树的根节点,求该树的深度。从根节点到叶子节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度包含的节点数为为树的深度,即二叉树节点的层数。...* m_pRight; }; 二叉树示例: 以图深度为四的二叉树为例,其先先根遍历序列为:{1,2,4,5,7,3,6},中根遍历序列为:{4,2,7,5,1,3,6},根据先根序列和中根序列即可构造唯一的二叉树...nLeft+1:nRight+1; } 2 二叉树的宽度 题目: 给定一颗二叉树,求二叉树的宽度。 宽度的定义: 二叉树的宽度定义为具有最多结点数的层中包含的结点数。...具体实现: //求二叉树的宽度 int treeWidth(BinaryTreeNode *pRoot){ if (pRoot == NULL) return 0;...[2]求二叉树的深度和宽度

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

    回溯树求集合全排列和所有子集

    本公众号主要推送关于对算法的思考以及应用的消息。算法思想说来有,分而治之,深度搜索,动态规划,回溯,贪心等,结合这些思想再去思考如今很火的大数据,云计算和机器学习,是不是也别有一番风味呢?...02 — 搜索算法 搜索算法,常见的几种形式,深度优先,广度优先,二分搜索,应用搜索算法的前提是求解空间是有限的,然后在这个空间中找出满足题意的解。...首先我们拿出元素1,然后在1,2,3 这个深度方向寻找,找到满足题意的解有两个,1,2,3,和1,3,2; 然后再在广度方向上搜索,此时的元素为2,再在1,2,3 深度方向上搜索,得到满足题意的解,2,1,3...和2,3,1, 最后,在广度方向上搜索到3,再在1,2,3 深度方向上搜索,满足题意的解为 3,1,2 和 3,2,1。...讲解的那道题思路非常相似,灵活运用的这个思考过程还是很重要的,仔细体会下吧。

    1.1K90

    求哈夫曼树的权值

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。...需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。 输入描述: 输入有多组数据。...输入样例: 5 1 2 2 5 9 输出样例: 37 相关知识: 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman...哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 解题思路: 利用优先队列来求解,每次从队列中取出最小值和次小值累加之后再入队,一直算到结点大小为1,即根结点为止。.../取出队列中的次最小的元素 int min2 = l.top(); l.pop(); //计算最小值和次最小值的权值 sum += min1

    1.1K20

    C++ Prim和 Kruskal 求最小生成树算法

    生成树:在图中找一棵包含图中的所有节点的树,生成树是含有图中所有顶点的无环连通子图。所有可能的生成树中,权重和最小的那棵生成树就叫最小生成树。...在无向加权图中计算最小生成树,使用最小生成树算法的现实场景中,图的边权重一般代表成本、距离这样的标量。...kruskal 这里就用到了贪心思路:将所有边按照权重从小到大排序,从权重最小的边开始遍历,如果这条边和mst中的其它边不会形成环,则这条边是最小生成树的一部分,将它加入mst集合;否则,这条边不是最小生成树的一部分...{ this->parent[i]=i; } } /* * 合并函数,构建边 */ void union_(int a,int b) { //检查a 和...//存储所有边 Edge edges[100]; //顶点数,边数 int v,e; //优先队列 priority_queue proQue; //最小生成树的权重

    28320

    线段树 BIT 求冒泡排序的交换次数

    线段树特别适合与区间相关的运算,比如MRQ(minimum range query)求一段区间内的最小值。...BIT可以看作是压缩了的线段树,由于(某类)线段树的右节点可以由父结点和左兄弟求出来,所以右结点就不用存了。...求冒泡排序的交换次数,直观的想可以直接在冒泡排序的过程中计算交换次数,时间复杂度是O(n^2)。交换次数其实是(位置在j的前面,数值还比aj大的数)j从0到n求和。...算法的特点是反复对某一区间内的所有元素求和,可以用BIT来优化。...做法是,i从0到n遍历,在循环的某一趟中,dat[ai]表示数字ai的之前出现过的次数,sum(ai)表示在这一趟之前,小于等于ai的数出现的次数。

    1.6K80

    加权无向图----Kruskal算法实现最小生成树

    上一篇:加权无向图的实现 加权无向图----Prim算法实现最小生成树 数据结构: 用一条优先队列将边按照权重从小到大排序 用union-find数据结构来识别会形成环的边 用一条队列来保存最小生成树的所有边...Kruskal算法的计算一个含V个顶点和E条边的连通加权无向图的最小生成树所需空间与E成正比,所需时间与ElogE成正比(最坏情况)。...方法:将边都添加进最小优先权队列中,每次从中取出最小的边,检查会不会与已经选出的边构成环(使用union-find算法),如果构成环,则弃掉这条边,否则将这条边加入最小生成树队列。...public class KruskalMST { private Queue mst; //用来保存最小代价生成树的队列 public KruskalMST(EdgeWeightedGraph...uf.qu_union(v,w);//合并分量 mst.enqueue(e);//将边添加进树中 } } public Iterable<Edge

    1.1K00

    加权无向图----Prim算法实现最小生成树

    上一篇:加权无向图的实现 加权无向图----Kruskal算法实现最小生成树 图的生成树是它的一棵含有其所有顶点的无环连通子图,加权图的最小生成树(MST)是它的一棵权值最小的生成树。...切分定理是解决最小生成树问题的所有算法的基础。  Prim算法能够得到任意加权连通无向图的最小生成树。...mst; } } Prim算法的延时实现计算一个含V个顶点和E条边的连通加权无向图的最小生成树所需空间与E成正比,所需时间与ElogE成正比(最坏情况)。...引进两个顶点索引数组edgeTo[]和distTo[],它们有如下性质: 如果顶点v不在树中但至少含有一条边和树相连,那么edgeTo[v]将是v和树连接的最短的边,distTo[v]为这条边的权重。...V个顶点和E条边的连通加权无向图的最小生成树所需空间和V成正比,所需时间和ElogV成正比(最坏情况)。

    1.6K00

    地理加权分析_地理加权回归中的拟合度

    地理加权回归分析完成之后,与OLS不同的是会默认生成一张可视化图,像下面这张一样的: 这种图里面数值和颜色,主要是系数的标准误差。主要用来衡量每个系数估计值的可靠性。...首先,地理加权回归很倚赖于带宽(或者说,依赖于临近要素),那么如果我的带宽无穷大的时候,整个分析区域里面的要素都变成了我的临近要素,这样地理加权就没有意义了,变成了全局回归也就是OLS……这样,每个系数的估计值就变成...那么对于大的带宽来说,所有的要素都被包含进回归方程里面,那么回归方程系数的有效数量接近实际的数量(地理加权的权重都是1)。...EffectiveNumber这个值,就是用于衡量这个平衡点的数值。这个数值主要用于诊断不同的模型中使用。 Sigma 西格玛值为标准化剩余平方和(剩余平方和除以残差的有效自由度)的平方根。...AICc(关于赤则的信息,查看上面给出的白话空间统计二十四:地理加权回归(五)) AICc是模型性能的一种度量,有助于比较不同的回归模型。

    1.3K20

    已知前序遍历和中序遍历求二叉树

    大家好,又见面了,我是你们的朋友全栈君。 描述 输入某二叉树的前序遍历和中序遍历的结果,请输出后序遍历序列。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。...例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},重建二叉树并返回后序遍历序列 输入 输入某二叉树的前序遍历和中序遍历的结果 输出 输出后序遍历序列...7 4 2 5 8 6 3 1 题意: 前序遍历即先访问根节点,然后是左子树,右子树 中序遍历为先访问左子树,然后是根节点,右子树 所以通过前序遍历不断地找到根节点,然后中序遍历找到其左子树和右子树...最后就可以得到这棵二叉树,后序遍历即为 7 4 2 5 8 6 3 1 实现代码: #include #include #include树 if(precount==incount&&precount!

    37110

    求二叉搜索树的最小绝对差!

    ,请你计算树中任意两节点的差的绝对值的最小值。...示例: 提示:树中至少有 2 个节点。 思路 题目中要求在二叉搜索树上任意两节点的差的绝对值的最小值。 注意是二叉搜索树,二叉搜索树可是有序的。...遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了。 递归 那么二叉搜索树采用中序遍历,其实就是一个有序数组。...在一个有序数组上求两个数最小差值,这是不是就是一道送分题了。 最直观的想法,就是把二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出来最小差值了。...cur.left else: # 逐一处理节点 cur = stack.pop() if pre: # 当前节点和前节点的值的差值

    31410

    二叉树的前中后序遍历以及求深度、叶子节点和二叉树的重建

    这使得二叉搜索树可以快速地查找、插入和删除节点,时间复杂度为O(log n)。...int treeDepth(TreeNode root) {//求二叉树的深度 if (root == null) return 0; return Math.max(...treeDepth(root.left), treeDepth(root.right)) + 1; } public int treeLeaf(TreeNode root) {//求二叉树的叶子数量...1 2 4 0 0 5 0 0 3 6 0 0 7 0 0,是因为4 5 6 7为叶子,没有子叶 二叉树的重建  二叉树的重建是指根据已知的二叉树的前序遍历和中序遍历序列,重新构建出二叉树的过程。...具体过程如下: (1)根据前序遍历序列,第一个元素为根节点,将其插入二叉树中。 (2)根据中序遍历序列,找到根节点在其中的位置,将中序遍历序列划分为左子树和右子树的序列。

    35230
    领券