L2-004 这是二叉搜索树吗? (25分)*
经典问题之判断是否是二叉搜索树:二叉搜索树中序遍历有序or....
这道题需要重新看
这里判断:(参考柳婼)
//柳婼
#include<bits/stdc++.h>
using namespace std;
int n;
int pre[1010];
vector<int> post;
bool isMirror=false;
void dfs(int l,int r){if(l>r) return;int root=pre[l];int i=l+1,j=r;if(isMirror==false){while(pre[i]<root&&i<=r) i++;while(pre[j]>=root&&j>l) j--;}else{while(pre[i]>=root&&i<=r) i++;while(pre[j]<root&&j>l) j--;}if(i-j!=1) return;//左子树dfs(l+1,j);dfs(i,r);post.push_back(root);
}
int main(){cin>>n;for(int i=0;i<n;i++) cin>>pre[i];dfs(0, n - 1);if(post.size() != n) {isMirror = true;post.clear();dfs(0, n - 1);}if(post.size() == n) {printf("YES\n%d", post[0]);for(int i = 1; i < n; i++)printf(" %d", post[i]);} else {printf("NO");}return 0;
}
我自己瞎写的... 这个段错误犯了无数次,要吸取教训了 j<N
#include<bits/stdc++.h>
using namespace std;
int d[1010],temp[1010];
vector<int> inorder;
vector<int> v;
int n;
void inn(int l,int r,int flag){if(l>r) return;int root=d[l];int j=l+1;if(flag==1)while(j<n&&d[j]<root) j++;elsewhile(j<n&&d[j]>=root) j++;if(l!=r) inn(j,r,flag);inorder.push_back(root);if(l!=r) inn(l+1,j-1,flag);
}
void dfs(int l,int r,int flag){if(l>r) return;int root=d[l];v.push_back(root);if(l==r) return;int j=l+1;//左子树右子树if(flag==1)while(j<n&&d[j]<root) j++;elsewhile(j<n&&d[j]>=root) j++;dfs(j,r,flag);dfs(l+1,j-1,flag);
}
int main(){cin>>n;for(int i=0;i<n;i++){cin>>d[i];temp[i]=d[i]; }
// int flag=1;inn(0,n-1,1);
// for(int i=0;i<inorder.size();i++){
// cout<<" "<<inorder[i];
// }if(inorder.size()==n){//中序遍历 bool x=true;for(int i=1;i<inorder.size();i++){if(inorder[i]>inorder[i-1]){x=false;break;}}if(x){cout<<"YES"<<endl;dfs(0,n-1,1);for(int i=v.size()-1;i>=0;i--){if(i!=v.size()-1) cout<<" ";cout<<v[i];}return 0;}}inorder.clear();v.clear();inn(0,n-1,2);
// for(int i=0;i<inorder.size();i++){
// cout<<" "<<inorder[i];
// }if(inorder.size()==n){bool x=true;for(int i=1;i<inorder.size();i++){if(inorder[i]<inorder[i-1]){x=false;break;}}if(x){cout<<"YES"<<endl;dfs(0,n-1,2);for(int i=v.size()-1;i>=0;i--){if(i!=v.size()-1) cout<<" ";cout<<v[i];}return 0;}}cout<<"NO";return 0;}
L2-004 这是二叉搜索树吗? (25分)*相关推荐
- l2-004 这是二叉搜索树吗? (25分)_什么是 “线段树” ?
线段树是一个复杂的数据结构,比较难理解,也比较难解释清楚.在我将这个数据结构反复学习了五遍的时候,我终于有了信心写出这篇介绍线段树的文章.希望大家能够掌握这种数据结构. 这篇文章比较长,建议大家耐心阅 ...
- 04-树4 是否同一棵二叉搜索树 (25 分)
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- 7-1 是否同一棵二叉搜索树 (25 分)
大一下半期数据结构 是否同一棵二叉搜索树 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1} ...
- 6-2 是否二叉搜索树 (25 分)
大一下半期数据结构 是否二叉搜索树 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...
- 【java学习之路】(数据结构篇)004.递归和二叉搜索树
递归 递归的概念 递归的方式求1-100的和 public class DGDemo {public static int sum(int n){//递归到底的情况if(n==1){return 1; ...
- java二叉搜索树详解
文章目录 一.概念 二.相关操作 2.0节点相关代码: 2.1查找 2.2插入 2.3删除(重难点) 2.4测试用例 三.小结 提示:以下是本篇文章正文内容,下面案例可供参考 一.概念 二叉搜索树又称 ...
- 天梯 L2 这是二叉搜索树吗?
L2-004 这是二叉搜索树吗? (25 分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的 ...
- 有序链表转换二叉搜索树(LeetCode)
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...
- LeetCode简单题之二叉搜索树的最小绝对差/最小距离
题目 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 差值是一个正数,其数值等于两值之差的绝对值. 示例 1: 输入:root = [4,2,6,1,3] 输出: ...
- LeetCode简单题之二叉搜索树的范围和
题目 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和. 示例 1: 输入:root = [10,5,15,3,7,null,18], low = 7, ...
最新文章
- 如何系统的自学python 知乎-如何系统地自学 Python?
- Android --- 百度地图 SDK v3.6.0 以上版本找不到 PoiOverlay 类
- 如何将catia装配件附材料_在网上买的快餐桌椅如何安装?餐厅快餐桌椅安装顺序与流程知识...
- R中方差,协方差,相关系数
- Spring框架的事务管理的基本概念
- 利用二分法解决 leetcode 378. Kth Smallest Element in a Sorted Matrix
- DeFi巨鲸0xb1向DeBank打赏5 ETH
- Zookeeper 安装部署
- Flask开发服务器
- 原生js实现form表单序列化
- Matlab系列教程_基础知识_基本矩阵操作
- Java提高性能的50个优化,记得收藏
- Java | 内部类的实例化
- dialog 弹窗关闭事件
- persevere的用法_persevere和persist和insist的区别是什么?
- 基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成
- Rest_FrameWork(3):Wrapping API views
- 简单了解下 TCP,学习握手和挥手以及各种状态到底是怎么样的
- 高精度减法(C语言实现)
- 使用系统默认声音、震动