树
FlashCanSavetheWorld
不想起床
展开
-
根据树的前序中序写出后序或后序中序写出前序遍历
#include<bits/stdc++.h>//#define int long longusing namespace std;int back[]={5,2,6,4,1},mid[]={2,5,1,6,4},pre[]={1,2,5,4,6};//string back,mid;void getback(int l,int r,int root){//通过前序和中序得到后序 if(l>r)return; int i = l; while (i&l原创 2021-05-30 14:48:41 · 126 阅读 · 1 评论 -
线段树区间更新及查询
lazy数组理解(延迟更新)设当前结点对应区间[l, r],待更新区间[a, b]当 a ≤ l ≤ r ≤ b,即 [l, r]∈[a,b]时,不再向下更新,仅更新当前结点,并在该结点加上懒标记,当必须得更新/查询该结点的左右子结点时,再利用懒标记的记录向下更新(pushdown)——懒标记也要向下传递,然后移除该结点的懒标记。这样就不用每次都更新到叶子结点,减少了大量非必要操作,从而优化时间复杂度。板子题:A Simple Problem with IntegersTime Limit: 50原创 2020-12-01 10:53:09 · 70 阅读 · 0 评论 -
线段树单点更新及区间查询
I Hate ItTime Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 147005 Accepted Submission(s): 51483Problem Description很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写原创 2020-11-30 17:16:27 · 80 阅读 · 0 评论 -
L2-004 这是二叉搜索树吗? (前序递归查找)
一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子树都是二叉搜索树。所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。输入格式:输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。输出格式:如果输入序列是对一棵二叉搜索树或其镜像进行原创 2020-11-29 16:54:44 · 210 阅读 · 0 评论 -
是否完全二叉搜索树 (树节点插入)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO。输入样例1:938 45 42 24 58 30 6原创 2020-05-13 10:57:27 · 600 阅读 · 0 评论 -
完全二叉树根据前中后序建树
用树状树组存树根据树的前中后序遍历思想递归建树前序:void dfs(int i){ if(i>n) return; nodes[i]=arr[cnt]; cnt++; if(i*2<=n){ dfs(i*2); } if(i*2+1<=n){ dfs(i*2+1); }}中序:void dfs(int i){ if(i>n) return;原创 2020-11-29 11:27:02 · 323 阅读 · 0 评论