![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
二叉树
文章平均质量分 53
树
向上的yyy
路漫漫其修远兮,吾将上下而求索
展开
-
P3884 [JLOI2009]二叉树问题——树化图Floyd+dfs
4483其中宽度表示二叉树上同一层最多的结点个数,节点u,v之间的距离表示从u到v的最短有向路径上向根节点的边数的两倍加上向叶节点的边数。给定一颗以 1 号结点为根的二叉树,请求出其深度、宽度和两个指定节点x,y之间的距离。原创 2022-12-13 13:36:08 · 488 阅读 · 0 评论 -
P1305 新二叉树——构造树
输入一串二叉树,输出其前序遍历。原创 2022-12-12 14:24:25 · 103 阅读 · 0 评论 -
P1229 遍历问题——先后求中情况数
我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。原创 2022-12-12 13:57:19 · 113 阅读 · 0 评论 -
P5076 【深基16.例7】普通二叉树(简化版)——multiset、二叉搜索树
您需要写一种数据结构,来维护一些数( 都是109以内的数字)的集合,最开始时集合是空的。其中需要提供以下操作,操作次数q不超过104x+1xxx−2147483647xx2147483647x。原创 2022-12-10 14:45:43 · 720 阅读 · 0 评论 -
P1827 [USACO3.4] 美国血统 American Heritage——先中构后
农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多于 26 个的顶点。树的中序遍历是按照左子树,根,右子树的顺序访问节点。原创 2022-12-10 12:16:14 · 119 阅读 · 0 评论 -
P4913 【深基16.例3】二叉树深度
有一个n(n≤106)个结点的二叉树。给出每个结点的两个子结点编号(均不超过n),建立一棵二叉树(根节点的编号为1),如果是叶子结点,则输入0 0。建好这棵二叉树之后,请求出它的深度。二叉树的是指从根节点到叶子结点时,最多经过了几层。原创 2022-12-10 10:42:31 · 583 阅读 · 0 评论 -
P4715 【深基16.例1】淘汰赛——二叉思想
有2n(n≤7)个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?原创 2022-12-10 10:23:39 · 135 阅读 · 0 评论 -
T2113 [NOIP2001]求先序排列
直接传字符串,substr函数第二个参数为截取的长度,不是java的结束位置,两个参数的字符串长度要相等。原创 2022-09-25 12:07:04 · 203 阅读 · 0 评论 -
1368:对称二叉树(tree_c)
【题目描述】如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称.例:如下图中的二叉树T1是对称的,T2是不对称的。二叉树用顺序结构给出,若读到#则为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”,反之输出“No”。【输入】二叉树用顺序结构给出,若读到#则为空。【输出】如果二叉树是对称的,输出“Yes”,反之输出“No”。【输入样例】ABCDE【输出样例】Yes。...原创 2022-08-29 18:24:36 · 402 阅读 · 0 评论 -
1367:查找二叉树(tree_a)
【题目描述】已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点。例:如图二叉树的数据文件的数据格式如下:【输入】第一行n为二叉树的结点个树,n原创 2022-08-29 13:55:40 · 242 阅读 · 0 评论 -
1366:二叉树输出(btout)
【题目描述】树的凹入表示法主要用于树的屏幕或打印输出,其表示的基本思想是兄弟间等长,一个结点的长度要不小于其子结点的长度。二叉树也可以这样表示,假设叶结点的长度为1,一个非叶结点的长度等于它的左右子树的长度之和。一棵二叉树的一个结点用一个字母表示(无重复),输出时从根结点开始:每行输出若干个结点字符(相同字符的个数等于该结点长度),如果该结点有左子树就递归输出左子树;如果该结点有右子树就递归输出右子树。...原创 2022-08-29 12:42:22 · 325 阅读 · 0 评论 -
1365:FBI树(fbi)
【题目描述】我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:T的根结点为R,其类型与串S的类型相同;若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。...原创 2022-08-29 11:09:46 · 811 阅读 · 0 评论 -
1364:二叉树遍历(flist)
【题目描述】树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。【输入】两行,每行是由字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的中序遍历和按层遍历的序列。【输出】一行,表示二叉树的先序序列。【输入样例】DBEACABCDE【输出样例】ABDEC。...原创 2022-08-28 20:49:46 · 384 阅读 · 0 评论 -
1363:小球(drop)
【题目描述】许多的小球一个一个的从一棵满二叉树上掉下来组成FBT(Full Binary Tree,满二叉树),每一时间,一个正在下降的球第一个访问的是非叶子节点。然后继续下降时,或者走右子树,或者走左子树,直到访问到叶子节点。决定球运动方向的是每个节点的布尔值。最初,所有的节点都是false,当访问到一个节点时,如果这个节点是false,则这个球把它变成true,然后从左子树走,继续它的旅程。如果节点是true,则球也会改变它为false,而接下来从右子树走。...原创 2022-08-27 20:36:51 · 464 阅读 · 0 评论 -
1340:【例3-5】扩展二叉树
【题目描述】由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。现给出扩展二叉树的先序序列,要求输出其中序和后序序列。【输入】扩展二叉树的先序序列。【输出】输出其中序和后序序列。【输入样例】【输出样例】DBFEGACDFGEBCA。......原创 2022-08-27 18:23:10 · 590 阅读 · 0 评论 -
1339:【例3-4】求后序遍历
【题目描述】输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。【输入】共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。【输出】一行,表示树的后序遍历序列。【输入样例】abdecdbeac【输出样例】debca。.........原创 2022-08-27 15:52:52 · 399 阅读 · 0 评论 -
1338:【例3-3】医院设置
【题目描述】设有一棵二叉树(如下图),其中圈中的数字表示结点中居民的人口,圈边上数字表示结点编号。现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻结点之间的距离为1。就本图而言,若医院建在1处,则距离和=4+12+2×20+2×40=136;若医院建在3处,则距离和=4×2+13+20+40=81……【输入】第一行一个整数n,表示树的结点数(n≤100)。.........原创 2022-08-25 21:48:06 · 677 阅读 · 0 评论 -
1337:【例3-2】单词查找树——Trie
【题目描述】在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都画出与单词列表所对应的单词查找树,其特点如下:1.根结点不包含字母,除根结点外每一个结点都仅包含一个大写英文字母;2.从根结点到某一结点,路径上经过的字母依次连起来所构成的字母序列,称为该结点对应的单词。单词列表中的每个单词,都是该单词查找树某个结点所对应的单词;3.在满足上述条件下,该单词查找树的结点数最少。4.例如图3-2左边的单词列表就对应于右边的单词查找树。...原创 2022-08-25 17:33:51 · 511 阅读 · 0 评论 -
1336:【例3-1】找树根和孩子
【题目描述】给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子。【输入】第一行:n(结点个数≤100),m(边数≤200)。以下m行:每行两个结点x和y,表示y是x的孩子(x,y≤1000)。【输出】第一行:树根:root;第二行:孩子最多的结点max;第三行:max的孩子(按编号由小到输出)。【输入样例】8 74 14 21 31 52 62 72 8【输出样例】426 7 8。原创 2022-08-25 12:54:24 · 1843 阅读 · 0 评论 -
654. 最大二叉树
给定一个不重复的整数数组 nums。最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。返回 nums 构建的 最大二叉树。原创 2022-08-22 21:06:25 · 66 阅读 · 0 评论 -
1302. 层数最深叶子节点的和
给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和。示例 1:输入:root = [1,2,3,4,5,null,6,7,null,null,null,null,8]输出:15示例 2:输入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]输出:19来源:力扣(LeetCode)链接:https://leetcode.cn/problems/deepest-leaves-sum。原创 2022-08-19 19:41:35 · 155 阅读 · 0 评论 -
L2-006 树的遍历 (25 分)
分析关于通过后序、中序创建二叉树,请看:https://blog.csdn.net/weixin_51995229/article/details/124301027需要注意数组开的大小要正好为结点数,因为在构造时候用的是数组的长度作为的子树区间终点;也可以在构造方法中多加一个参数,用来指定结点的个数,这样可以随意创建数组的大小;关于二叉树的层次遍历,请看:https://blog.csdn.net/weixin_51995229/article/details/124197521此题我们将二叉.原创 2022-04-20 17:32:55 · 617 阅读 · 0 评论 -
通过后序序列、中序序列还原二叉树 java
分析通过先序序列、中序序列还原二叉树 java:传送门需要注意这个地方是post[end1],而不是post[s1],因为他是后序序列,根节点在后面;和上一篇文章有所不同;思路和先序序列、中序序列还原二叉树一样,只不过根节点的位置在后序序列的后面;也是先找到根节点在中序序列的位置,然后进行子树区间的划分;经过测试发现构造出来的二叉树进行遍历,与原序列相同;java简单样例实验:import java.util.Scanner;public class Main { pub.原创 2022-04-20 16:51:49 · 746 阅读 · 0 评论 -
通过先序序列、中序序列还原二叉树 java
分析通过两个已知的序列,先序和中序构造出二叉树;构造的核心就是递归时候的左右子树的区间端点问题,我们可以通过画图,不管是已知先、中构造还是,已知后、中去构造,我们都要先去找根节点。如果是已知先序的话,根节点就是先序序列第一个元素,然后找根节点在中序中的位置,然后通过这个位置i,可以找到左子树的长度为i-s2,可以供先序序列去找左子树的长度;大致就是:先找到根节点,然后通过根节点定位在中序的i,然后先找中序的两个子树区间长度范围,然后通过i-s2这个关键式子在先序中定位,找子树的区间范围;ja.原创 2022-04-20 15:31:50 · 835 阅读 · 0 评论 -
层次遍历二叉树
利用队列实现,有点像对图的广度优先搜索,先判断根节点是否为空,不为空直接加入队列,然后构成循环,条件为队列不空,然后用临时变量保存队头,让队头出列,输出队头的信息,然后 如果左孩子、右孩子不为空,加入队列;public void levelOrder() { Queue<BTNode<Character>> q = new LinkedList<>(); BTNode<Character> temp; if .原创 2022-04-15 16:19:31 · 910 阅读 · 0 评论 -
二叉树的宽度
通过wide数组去保存每一层的节点数,然后遍历这个数组,得到的最大值就是二叉树的宽度; int[] wide;//第i层的所有节点数 //二叉树的最大宽度 public int width() { wide = new int[this.height() + 5];//利用二叉树高度的函数来开数组 width(root, 1); int res = wide[1]; for (int i = 2; i <= this.原创 2022-04-15 15:46:50 · 122 阅读 · 0 评论 -
二叉树某一结点的所有祖先
利用递归,分别去找左子树、右子树,先找到值为x的结点,然后通过递归的回溯,把x结点的祖先由下到上依次保存在StringBuffer中;主要方法: public String ancestor(char x) { StringBuffer sb = new StringBuffer(); ancestor(root, x, sb); return sb.toString(); } private boolean ancestor(BTNo.原创 2022-04-15 14:23:14 · 2117 阅读 · 0 评论 -
顺序存储的二叉树构造为链式结构
注意不能越界字符串数组,遍历字符串;如果当前遍历的第i个字c是结点的话(c!=’#’),那就创建一个节点,date为当前的c,然后通过递归去求解左子树,左孩子的编号为2i+1,右孩子的编号为2i+2;向下递归下去,即可得到这棵树,return这个根节点t即可;否则的话,直接return null,代表上个结点的某一孩子为空主要 方法: public static BTree trans(String str) { BTree res = new BTree(); ..原创 2022-04-15 14:01:11 · 506 阅读 · 0 评论 -
二叉树某个结点所在层数
所有节点的值不同,设所查找结点值当前所在层次为1;通过递归向下找x的结点所在位置,然后通过回溯的时候,也就是left + right + 1,不断+1;left和right都为0,说明没找到x结点,返回0;left和right只能一个为0,一个非0代表找到的结点层数,我们直接return left+right+1;不用判断哪个为0,哪个不为0; public int level(char x) { return level(root, x); } privat..原创 2022-04-15 12:31:44 · 4477 阅读 · 0 评论 -
输出二叉树的叶子结点
递归出口不能掉,当当前结点t为null时,要return;满足叶子结点的条件输出结点值,否则的话分别递归遍历左子树、右子树;BTree的部分方法: public void displayLeaf() { displayLeaf(root); } private void displayLeaf(BTNode t) { if (t == null) return; if (t.lchild == null &.原创 2022-04-15 10:32:17 · 3763 阅读 · 0 评论 -
二叉树的备份
BTree类的方法(伪代码) public BTree copy() { BTree res = new BTree(); res.root = copy(this.root);//把根节点复制给他 return res; } private BTNode copy(BTNode t) { if (t == null) return null; BTNode p; p.原创 2022-04-15 10:12:29 · 89 阅读 · 0 评论 -
二叉树的先序 中序 后序遍历
根->左->右 public void preOrder() { System.out.print("二叉树的先序遍历序列:"); this.preOrder(root); } private void preOrder(BTNode t) { if (t != null) { System.out.print(t.data); this.preOrder(t.lchild); .原创 2022-04-14 21:10:38 · 311 阅读 · 0 评论 -
求解二叉树的高度
向下递归的过程 public int height() { return this.height(root); } private int height(BTNode t) { if (t == null) { return 0; } else { return Math.max(this.height(t.lchild), this.height(t.rchild)) + 1;//每向下搜.原创 2022-04-14 21:04:49 · 243 阅读 · 0 评论 -
二叉树_查找值为x的结点
构造的二叉树同上:https://blog.csdn.net/weixin_51995229/article/details/124173365?spm=1001.2014.3001.5501public BTNode find(char x) { return find(root, x); } private BTNode find(BTNode t, char x) { BTNode p; if (t == null)//递归出口 .原创 2022-04-14 20:46:52 · 787 阅读 · 0 评论 -
括号表示法构造二叉树
创建树:public void createBTree(String str) { Stack<BTNode> st = new Stack<>(); BTNode p = null; char ch; boolean flag = true;//处理的是左子树 int n = str.length(); int i = 0; while (i < n) { .原创 2022-04-14 18:38:30 · 4296 阅读 · 0 评论