经典问题之判断是否是二叉搜索树:二叉搜索树中序遍历有序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分)*相关推荐

  1. l2-004 这是二叉搜索树吗? (25分)_什么是 “线段树” ?

    线段树是一个复杂的数据结构,比较难理解,也比较难解释清楚.在我将这个数据结构反复学习了五遍的时候,我终于有了信心写出这篇介绍线段树的文章.希望大家能够掌握这种数据结构. 这篇文章比较长,建议大家耐心阅 ...

  2. 04-树4 是否同一棵二叉搜索树 (25 分)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  3. 7-1 是否同一棵二叉搜索树 (25 分)

    大一下半期数据结构 是否同一棵二叉搜索树 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1} ...

  4. 6-2 是否二叉搜索树 (25 分)

    大一下半期数据结构 是否二叉搜索树 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...

  5. 【java学习之路】(数据结构篇)004.递归和二叉搜索树

    递归 递归的概念 递归的方式求1-100的和 public class DGDemo {public static int sum(int n){//递归到底的情况if(n==1){return 1; ...

  6. java二叉搜索树详解

    文章目录 一.概念 二.相关操作 2.0节点相关代码: 2.1查找 2.2插入 2.3删除(重难点) 2.4测试用例 三.小结 提示:以下是本篇文章正文内容,下面案例可供参考 一.概念 二叉搜索树又称 ...

  7. 天梯 L2 这是二叉搜索树吗?

    L2-004 这是二叉搜索树吗? (25 分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的 ...

  8. 有序链表转换二叉搜索树(LeetCode)

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...

  9. LeetCode简单题之二叉搜索树的最小绝对差/最小距离

    题目 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 差值是一个正数,其数值等于两值之差的绝对值. 示例 1: 输入:root = [4,2,6,1,3] 输出: ...

  10. LeetCode简单题之二叉搜索树的范围和

    题目 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和. 示例 1: 输入:root = [10,5,15,3,7,null,18], low = 7, ...

最新文章

  1. 如何系统的自学python 知乎-如何系统地自学 Python?
  2. Android --- 百度地图 SDK v3.6.0 以上版本找不到 PoiOverlay 类
  3. 如何将catia装配件附材料_在网上买的快餐桌椅如何安装?餐厅快餐桌椅安装顺序与流程知识...
  4. R中方差,协方差,相关系数
  5. Spring框架的事务管理的基本概念
  6. 利用二分法解决 leetcode 378. Kth Smallest Element in a Sorted Matrix
  7. DeFi巨鲸0xb1向DeBank打赏5 ETH
  8. Zookeeper 安装部署
  9. Flask开发服务器
  10. 原生js实现form表单序列化
  11. Matlab系列教程_基础知识_基本矩阵操作
  12. Java提高性能的50个优化,记得收藏
  13. Java | 内部类的实例化
  14. dialog 弹窗关闭事件
  15. persevere的用法_persevere和persist和insist的区别是什么?
  16. 基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成
  17. Rest_FrameWork(3):Wrapping API views
  18. 简单了解下 TCP,学习握手和挥手以及各种状态到底是怎么样的
  19. 高精度减法(C语言实现)
  20. 使用系统默认声音、震动

热门文章

  1. Android之Activity界面劫持反劫持
  2. 深度学习计算机视觉高级图片标注工具SmartTool介绍
  3. 显卡天梯图2022最新排名
  4. 知网不能下载PDF?CAJ格式太鸡肋?
  5. VBa运行c语言程序,Excel VBA编程详解
  6. 计算机职称专业分类明细,职称分类一览表
  7. 游戏直播用哪个录屏软件好?
  8. Linux:libxml2的安装及使用示例(C语言)
  9. 开源Java B2B2C商城项目Javashop的部署安装过程
  10. Altium Designer如何生成Gerber文件