首页 > 其他分享 >L2-004 这是二叉搜索树吗?

L2-004 这是二叉搜索树吗?

时间:2024-03-31 12:12:38浏览次数:24  
标签:pre int dfs 二叉 L2 004 post root ssize

这种题边界真的是每次都搞不清楚,我感觉现场估计也写不出来。

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int ismirror;
int pre[N];
vector<int> post;
void dfs(int root,int tail) {//最后一个
	if (root > tail) return;
	int i = root + 1;
	int j = tail;
	if (!ismirror) {//正常的二叉搜索树
		while (i <= tail && pre[i] < pre[root]) {
			i++;
		}
		while (j > root && pre[j] >= pre[root]) {
			j--;
		}
		if (i-j != 1) return;//无法构成二叉搜索树
		dfs(root + 1, j);
		dfs(i, tail);
		post.push_back(pre[root]);
	}
	else {
		while (i <= tail && pre[i] >= pre[root]) {
			i++;
		}
		while (j > root && pre[j] < pre[root]) {
			j--;
		}
		if (i - j != 1) return;//无法构成二叉搜索树
		dfs(root + 1, j);
		dfs(i, tail);
		post.push_back(pre[root]);
	}
}
int main() {
	int ssize;
	cin >> ssize;
	for (int i=0; i < ssize; i++) {
		cin >> pre[i];
	}
	ismirror = 0;
	dfs(0, ssize - 1);
	if (post.size() != ssize) {//如果不镜像无法满足二叉搜索树
		ismirror = 1;
		post.clear();
		dfs(0, ssize - 1);
	}
	if (post.size() == ssize) {
		cout << "YES" << endl;
		int flag = 0;
		for (int i = 0; i < post.size(); i++) {
			if (flag) cout << " ";
			cout << post[i];
			flag++;
		}
	}
	else {
		cout << "NO" << endl;
	}
	return 0;
}

参考自: https://www.cnblogs.com/l609929321/p/8486086.html

标签:pre,int,dfs,二叉,L2,004,post,root,ssize
From: https://www.cnblogs.com/chengyiyuki/p/18106550

相关文章

  • L2-011 玩转二叉树
    和L2-006是一样的。正常建树,只是在BFS的时候先放右儿子。L2-006树的遍历https://www.cnblogs.com/chengyiyuki/p/18106375代码:#include<bits/stdc++.h>usingnamespacestd;constintN=40;intpre[N],in[N];intL[N],R[N];intbuild(intal,intar,intbl,int......
  • java数据结构与算法刷题-----LeetCode95. 不同的二叉搜索树 II
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录分治回溯+记忆化搜索分治回溯+记忆化搜索卡特兰数,例如对于n个进栈元素,有多少种出栈顺序,......
  • L2-006 树的遍历
    先建树,然后遍历数组。这种方式比较消耗空间,适用于数据量小的情况,如果形成一条链,那将是致命的这个空间。#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intin[N],post[N];vector<int>tree(N,-1);voidbuild(introot,intstart,inted,intidx)......
  • wsl2 代理功能
    原文链接:https://blog.csdn.net/weixin_62355896/article/details/1344583301打开或创建WSL配置文件(位于C:/User/%你的用户名/.wslconfig),并添加以下内容:[experimental]autoMemoryReclaim=gradualnetworkingMode=mirroreddnsTunneling=truefirewall=trueautoProxy=true......
  • WSL2配置代理
    新建proxy.sh文件,内容如下:#!/bin/shhostip=$(cat/etc/resolv.conf|grepnameserver|awk'{print$2}')wslip=$(hostname-I|awk'{print$1}')port=7890PROXY_HTTP="http://${hostip}:${port}"set_proxy(){exporthttp_proxy=&......
  • 【洛谷】P1004 [NOIP2000提高组]方格取数
    题目描述题目描述设有N×N 的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例):某人从图的左上角的 A 点出发,可以向下行走,也可以向右走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为......
  • luogu P1543 [POI2004] SZP 题解
    题目传送门前置知识树形DP解法将\(a_{i}\)向\(i\)连一条有向边,这样就形成了基环外向树森林。基环外向树森林内每棵基环外向树是相互独立的,需要单独处理。对于每棵基环外向树,任取环上一点\(x\),断开\(x\)到\(fa_{x}\)的有向边,外向树就变成了一棵以\(x\)为根的树。......
  • PTA L2-039 清点代码库
    上图转自新浪微博:“阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍。请设计一个程序,能够将代码库中所有功能重复的代码找出。各位大佬有啥想法,我当时就懵了,然后就挂了。。。”这里我们把问题简化一下:首先假设两个功能模块如果接受同样的输......
  • PTA L2-040 哲哲打游戏
    哲哲是一位硬核游戏玩家。最近一款名叫《达诺达诺》的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切!为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择可以从某个剧情点去往另外一个剧情点。此外,游戏还设置了一些存档,在某个剧情点可以将玩......
  • LC 104.二叉树的最大深度
    104.二叉树的最大深度给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。示例1:输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2提示:树中节点的数量在......