树
一些树==
化身孤岛的鲸o
我祈祷拥有一颗透明的心灵
展开
-
LeetCode 103. 二叉树的锯齿形层序遍历 dfs
LeetCode 103. 二叉树的锯齿形层序遍历 dfs原创 2023-04-20 03:23:54 · 78 阅读 · 0 评论 -
Python语言实现二叉树的前序、中序、后序和层序遍历
Python语言实现二叉树的前序、中序、后序和层序遍历原创 2023-03-25 22:57:32 · 677 阅读 · 0 评论 -
LeetCode 236. 二叉树的最近公共祖先 倍增LCA
LeetCode 236. 二叉树的最近公共祖先 倍增LCA原创 2023-03-25 22:38:58 · 180 阅读 · 0 评论 -
Python求二叉树的属性(深度、直径等)
Python求二叉树的属性(深度、直径等)原创 2023-03-25 22:31:09 · 236 阅读 · 0 评论 -
Python语言建立二叉树的几种方式(适用于需要建树的场景)
Python语言建立二叉树的几种方式(适用于需要建树的场景)原创 2023-03-25 20:40:45 · 6742 阅读 · 4 评论 -
LeetCode 257 二叉树的所有路径 dfs或bfs
LeetCode 257 二叉树的所有路径 dfs或bfs原创 2023-03-24 04:03:55 · 54 阅读 · 0 评论 -
PIPIOJ 1266: 二叉树的直径 dfs
题目:http://39.106.164.46/problem.php?id=1266思路:二叉树的直径为每一个节点左右深度之和的最大值。可以使用一个全局变量sum,在求出深度的同时,记录每一个节点左右深度之和的最大值。代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include<cstri原创 2020-10-12 15:50:31 · 143 阅读 · 0 评论 -
PIPIOJ 1301: 交换二叉树的左右子树 利用前序建立二叉树
题目:http://39.106.164.46/problem.php?id=1301代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include<cstring>#include<vector>#include<stack>#include<map&g原创 2020-10-10 21:52:56 · 132 阅读 · 0 评论 -
CSU P2326 path 最短路+树的直径
CSU P2326 path 最短路+树的直径题解:通过画图观察,以及贪心考虑得出一个结论,从一个点出发,如果要回到原来的点,则所有边都要访问两次;而在这 道题中访问到最后一个点则立即停下来,那么最短路程和就是最后走到离这个点最远的那个点停下,即所有边的长度 * 2-这个点走到离它最远点的距离。而由于有多个出发点,那是我们利用从树的直径的性质,也就是在一棵树上的一个点的最远点一定是某一条树...原创 2020-02-24 00:13:21 · 196 阅读 · 0 评论 -
天梯赛 L3-016 二叉搜索树的结构 (30分)
天梯赛 L3-016 二叉搜索树的结构 (30分)题解:正常建立二叉搜索树即可,不过要注意数据中有负数的情况。代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include<cstr...原创 2020-02-20 13:58:18 · 346 阅读 · 0 评论 -
牛客网编程题 满二叉树转换为求和树 通过前序、中序建立二叉树
牛客网编程题 满二叉树转换为求和树 通过前序、中序建立二叉树题解:牛客网上的题解都是神仙打架,各种python+java,蒟蒻的我只能orz于是写一篇纯正的c++题解:(1)首先通过中序和前序建立一个二叉树(2)然后通过dfs后序遍历更新每个点最终的和,为什么要后序呢?因为一个点的和是要通过其左右子节点来求出的,我们需要先求出左右子节点的值。(3)最后我们再中序打印结果。#inclu...原创 2020-02-01 22:25:23 · 542 阅读 · 0 评论 -
二叉搜索树(BST)
链表允许我们添加、删除、搜索数据,这种数据结构会在执行时申请必要的内存空间,便于管理动态集合。但是,在链表中搜索元素的算法复杂度为O(n)。相比之下,使用动态树结构能更加有效地添加、删除和搜索数据。什么是二叉搜索树?搜索树是一种可以进行插入、搜索、删除等操作的数据结构,可以用作字典或者优先级队列。二叉搜索树属于最基本的搜索树。二叉搜索树的各结点均拥有键值,且该树时常满足下述二叉搜索树的性质。...原创 2019-07-25 16:11:40 · 207 阅读 · 0 评论 -
洛谷 P1087 FBI树 递归建立二叉树
洛谷 P1087 FBI树 递归建立二叉树题解:考察基本的递归建树过程。代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include<cstring>#include<...原创 2020-02-04 12:29:05 · 201 阅读 · 0 评论 -
洛谷 P1305 新二叉树 前序遍历字符二叉树
洛谷 P1305 新二叉树 前序遍历字符二叉树题解:在左右子节点中没有出现过的节点就是根节点。代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include<cstring>#...原创 2020-02-04 16:44:36 · 194 阅读 · 0 评论 -
洛谷 P5018 对称二叉树 判断一棵树及其子树是否是对称的
洛谷 P5018 对称二叉树 判断一棵树及其子树是否是对称的题解:首先,若以编号root为根节点的二叉树是对称二叉树,那么root的左右子节点必须存在且相等。其次,对这两个左右子节点来说,我们记left为左子节点,right为右子节点,那么:(1)left的右子节点必须等于right的左子节点(2)left的左子节点必须等于right的右子节点这两个条件必须都成立。可以对照这张图来看...原创 2020-02-04 16:01:18 · 245 阅读 · 0 评论 -
洛谷 P1030 求先序排列
洛谷 P1030 求先序排列代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include<cstring>#include<vector>#include<s...原创 2020-02-04 12:45:02 · 95 阅读 · 0 评论 -
二叉树已知前序、中序转后序输出
思路:后序:左、右、根中序:左、根、右前序:根、左、右前序序列:1,2,3,4,5,6中序序列:3,2,4,1,6,5前序序列中的第一个结点必定是树的根结点,令这个结点为root,root把这棵树分为了左右两棵子树。i为root所表示的值在中序中的下标,所以i即是分隔中序中对应root结点的左子树和右子树的下标。先打印左子树,后打印右子树,最后输出当前根结点pre[root]的值。...原创 2019-05-06 19:36:04 · 2109 阅读 · 0 评论 -
二叉树已知后序,中序转前序输出
思路:后序:左、右、根中序:左、根、右前序:根、左、右后序序列:3, 4, 2, 6, 5, 1中序序列:3, 2, 4, 1, 6, 5后序的最后一个总是根结点,在中序序列中找到该根结点的位置i,则i把中序分为两个部分,左边是左子树,右边是右子树。前序输出要求先打印根结点,再打印左子树,再打印右子树。左子树在后序中的根结点为root – (end – i + 1),即为当前根结点...原创 2019-05-06 19:16:00 · 876 阅读 · 0 评论 -
PAT甲级 1138 Postorder Traversal 中序和前序转后序
代码如下://中序和前序转后序#include<iostream>#include<vector>#include<stdio.h>using namespace std;int in[50005],pre[50005];vector<int> post;void postorder(int root,int start,int...原创 2019-11-16 00:10:52 · 168 阅读 · 0 评论 -
PAT甲级 1135 Is It A Red-Black Tree 红黑树
代码如下://红黑树#include<iostream>#include<stdio.h>#include<cmath>#define INF 0x3f3f3f3fusing namespace std;int tag1,minlen=INF,maxlen=-1,tag2;struct node{ int key; nod...原创 2019-11-16 00:07:30 · 240 阅读 · 0 评论 -
PAT甲级 1130 Infix Expression 抽象语法树AST
代码如下://抽象语法树AST#include<iostream>#include<vector>#include<string>using namespace std;struct tree{ string key; int left,right;};vector<tree> t;int n;strin...原创 2019-11-15 23:58:49 · 203 阅读 · 0 评论 -
PAT甲级 1127 ZigZagging on a Tree 层序蛇形遍历二叉树 中序+后序转层序
代码如下://层序蛇形遍历二叉树 中序+后序转层序#include<iostream>#include<stdio.h>#include<vector>#include<algorithm>using namespace std;int n;int in[35],post[35];struct node{ int k...原创 2019-11-15 23:53:46 · 208 阅读 · 0 评论 -
PAT甲级 1123 Is It a Complete AVL Tree 完全平衡二叉树 (30分)
代码如下://平衡二叉树#include<iostream>#include<vector>#include<math.h>#include<queue>using namespace std;int max_index=-1;struct node{//结点 int key; node *left; ...原创 2019-10-24 21:35:38 · 227 阅读 · 0 评论 -
PAT甲级 1119 Pre- and Post-order Traversals 已知二叉树前序、后序求中序
题目大意:给出二叉树的前序和后序,求中序,中序如果不唯一,输出“No”,然后输出任意一个序列即可,中序如果唯一,输出“Yes”,然后输出中序序列。思路:可以先参考一下大神的博客https://blog.csdn.net/richenyunqi/article/details/80158823代码如下://根据后序、前序构造二叉树#include<bits/stdc++.h&g...原创 2019-10-21 14:47:22 · 190 阅读 · 0 评论 -
PAT甲级 1115 Counting Nodes in a BST 完全二叉搜索树
题目大意:建立一棵二叉搜索树后,求出最后两层的结点数。代码如下:#include<iostream>#include<stdio.h>#include<math.h>using namespace std;int n;int level[1005]={0};int max_level=-1;struct node{ int ke...原创 2019-10-21 14:30:59 · 200 阅读 · 0 评论 -
PAT甲级 1110 Complete Binary Tree 判断一棵树是不是完全二叉树
题目大意:给出一棵二叉树,判断其是不是完全二叉树,若是,输出“YES”,并输出最后一个结点的编号,若不是,输出“NO”,并输出根结点的编号。思路:这道题既可以用BFS,也可以用DFS。BFS代码如下:#include<iostream>#include<algorithm>#include<math.h>#include<vector...原创 2019-10-21 13:58:38 · 162 阅读 · 0 评论 -
PAT甲级 1020 Tree Traversals 二叉树的中序,后序转层次遍历
思路:可以先参考:前序、中序转后序后序、中序转前序思路:后序、中序转层序与后序、中序转前序差不多,主要是我们需要一个index来记录层次遍历中结点的序号。代码如下:#include<iostream>#include<vector>#include<algorithm>using namespace std;int post[35];/...原创 2019-05-06 20:21:00 · 396 阅读 · 0 评论 -
PAT甲级 1043 Is It a Binary Search Tree BST与镜像BST
Solution:这道题要求判断给出的序列是不是一个二叉搜索树的前序或者镜像前序。如果是,则输出后序或者镜像后序。前序:根、左、右、镜像前序:根、右、左后序:左、右、根镜像后序:右、左、根也就是把所有子树的左右结点互换位置。首先根据给出的数据构建二叉搜索树,再分别前序和镜像前序遍历得到一个序列,和给出的比较,最后输出结果即可。代码如下:#include<iostrea...原创 2019-07-25 11:30:23 · 182 阅读 · 0 评论 -
PAT甲级1053 Path of Equal Weight(30分)树+DFS搜索
Solution:题目要求:给出一棵树,树的每个结点有对应的权重。给出一个目标权重,求从根结点到任意叶结点的路径上所有结点权重之和等于目标权重的所有路径。所有路径序列按照序列降序排列。输入:第一行三个正整数n,m,w;分别为总结点数,非叶子结点数以及目标权重。第二行为n个正整数,wi为第i个结点的权重。(0<=i<=n-1)。接下来m行,分别为每个非叶子结点的孩子结点信息。...原创 2019-09-01 10:33:53 · 184 阅读 · 0 评论 -
PAT甲级 1064 Complete Binary Search Tree(30分)完全二叉搜索树
Solution:题目要求:给一串构成树的序列,已知该树是完全二叉搜索树,求它的层序遍历的序列。总得概括来说,已知中序,可求root下标,可以求出层序。(1)因为二叉搜索树的中序满足:是一组序列的从小到大排列,所以只需排序所给序列即可得到中序。(2)因为根据完全二叉树的结点数,可以求出它的根结点在中序中对应的下标。(3)已知了中序,又可以根据结点数求出根结点的下标,就可以递归求出左右...原创 2019-09-01 11:33:36 · 225 阅读 · 0 评论 -
PAT甲级 1079 Total Sales of Supply Chain 树+DFS
Solution:题目要求:给出一个供应链(其实就是一颗树),有供应商,经销商以及零售商共n个结点(0~n-1),根结点恒为0,零售商就是叶子结点。从供应商到零售商,每经过一个结点,商品单位价格p就会有一定的涨幅r,每个零售商有自己的销量。求所有零售商所获得的钱数之和。代码如下://树+dfs#include<iostream>#include<vector>...原创 2019-09-01 17:48:38 · 303 阅读 · 0 评论 -
PAT甲级 1086 Tree Traversals Again 二叉树已知前序、中序求后序
Solution:push的顺序即为前序pop出栈的顺序即为中序根据前序、中序求后序代码如下://二叉树已知前序、中序求后序#include<iostream>#include<stack>#include<vector>using namespace std;int pre[35],in[35];int n;stack<in...原创 2019-09-01 18:06:52 · 230 阅读 · 0 评论 -
PAT甲级 1090 Highest Price in Supply Chain DFS+树
代码如下://树+DFS#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<iomanip>using namespace std;struct tree{ vector<int> child;...原创 2019-09-07 23:47:47 · 151 阅读 · 0 评论 -
PAT甲级 1155 Heap Paths DFS+树的层次遍历
Solution://DFS+树的层次遍历#include<iostream>#include<algorithm>#include<vector>using namespace std;struct tree{ int key; int left; int right; tree(){ le...原创 2019-09-07 23:44:24 · 184 阅读 · 0 评论 -
PAT甲级 1094 The Largest Generation DFS 找到结点数目最多的一层
Solution:题目大意:给出一棵树,有n个结点(1~n),其中1为根结点,m个非叶子结点。求出结点数最多的一层,输出这个结点数以及是第几层。先DFS得到树的最大层数。再遍历每一层得到每一层的结点数。最后找到最大的那一层即可。代码如下://树的层次遍历 找到结点数目最多的一层#include<iostream>#include<vector>#inclu...原创 2019-09-11 22:43:36 · 274 阅读 · 0 评论 -
PAT甲级 1099 Build A Binary Search Tree 中序建立二叉搜索树 (30分)
Solution:题目大意:要求我们根据已有的树的结构建立二叉搜索树,利用中序来建树即可。代码如下://根据固定的树的结构建立二叉搜索树#include<iostream>#include<vector>#include<queue>#include<algorithm>using namespace std;int n;//...原创 2019-09-14 22:29:35 · 202 阅读 · 0 评论 -
PAT甲级 1106 Lowest Price in Supply Chain 树+DFS
Solution:题目大意:给出一棵树,序号为0~n-1,根结点恒为0。根结点的价格为p,每往下一个结点,价格都会以百分之r的利率提升,统计最小价格子结点的个数并输出这个最小价格,保留4位小数。代码如下://树+dfs#include<iostream>#include<vector>#include<math.h>#include<s...原创 2019-09-30 19:48:33 · 176 阅读 · 0 评论 -
PAT甲级 1102 Invert a Binary Tree 反转树再层序中序输出
Solution:要求把一棵树左右子树交换后再层序和中序输出。代码如下:#include<iostream>#include<vector>#include<queue>using namespace std;struct tree{ int key; int left; int right; tree(){ ...原创 2019-09-30 20:36:34 · 198 阅读 · 0 评论 -
PAT 甲级 1004 Counting Leaves bfs或dfs计算树每一层的叶子节点数
代码如下:#include<iostream>#include<queue>#include<stdio.h>using namespace std;int level[105];//记录每一层的叶子结点个数,也就是最后要输出的结果struct node{ int child_num;//每个结点的子结点数量 int child[105]...原创 2019-04-18 13:27:35 · 277 阅读 · 0 评论