当前位置: 首页 > news >正文

【PAT甲级真题】- Is It a Binary Search Tree (25)

题目来源

Is It a Binary Search Tree (25)

题目描述点击链接自行查看

注意点:

  • 这里的二叉搜索树大于等于插到右边

思路简介

一道二叉树模板题(6202年了应该不会还有人不会写二叉树吧bushi
一开始想到前序遍历不可能确定一棵树还以为题目错了
后面发现题目说的是前序遍历是否有可能是一个二叉搜索树

那其实就是按照前序遍历的顺序以此把给出点插入到二叉搜索树当中
然后对建完的树进行一次前序遍历,如果结果相同,说明这个前序遍历是合法的,否则就是不合法的

然而题目中提到了镜像树也算
镜像其实也很简单,前序遍历的顺序是NLR当前(now)-左边(left)-右边(right)
镜像操作就是NRL,判断镜像树只要按照正常的顺序插入之后看看镜像前序遍历是否和给出序列相同即可

注意,如果是镜像的,由于我们的插入是正常的顺序,所以镜像树输出后序遍历时必须也是镜像的,需要再写一个镜像后续遍历

遇到的问题

  1. 后序遍历没有镜像WA了一次

代码

/** * https://www.nowcoder.com/pat/5/problem/4082 * 二叉树遍历模板 */#include<bits/stdc++.h>usingnamespacestd;structTreeNode{intkey;TreeNode*right,*left;TreeNode():key(0),right(nullptr),left(nullptr){}TreeNode(intk):key(k),right(nullptr),left(nullptr){}};voidinsert(TreeNode*&root,TreeNode*node){if(!root){root=node;return;}if(node->key<root->key){insert(root->left,node);}else{insert(root->right,node);}}voidpreorder(TreeNode*root,vector<int>&res){if(!root)return;res.emplace_back(root->key);preorder(root->left,res);preorder(root->right,res);}voidmirro_preorder(TreeNode*root,vector<int>&res){if(!root)return;res.emplace_back(root->key);mirro_preorder(root->right,res);mirro_preorder(root->left,res);}voidpostorder(TreeNode*root,vector<int>&res){if(!root)return;postorder(root->left,res);postorder(root->right,res);res.emplace_back(root->key);}voidmirro_postorder(TreeNode*root,vector<int>&res){if(!root)return;mirro_postorder(root->right,res);mirro_postorder(root->left,res);res.emplace_back(root->key);}voidsolve(){intn;cin>>n;TreeNode*root=nullptr;vector<int>input(n);for(inti=0;i<n;++i){cin>>input[i];TreeNode*node=newTreeNode(input[i]);insert(root,node);}vector<int>res1,res2,res;preorder(root,res1);mirro_preorder(root,res2);if(res1==input){cout<<"YES\n";postorder(root,res);for(inti=0;i<n;++i)cout<<res[i]<<' ';return;}if(res2==input){cout<<"YES\n";mirro_postorder(root,res);for(inti=0;i<n;++i)cout<<res[i]<<' ';return;}cout<<"NO";}intmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);//fstream in("in.txt",ios::in);cin.rdbuf(in.rdbuf());intt=1;//cin>>t;while(t--){solve();}return0;}
http://www.jsqmd.com/news/546172/

相关文章:

  • MySQL存储引擎InnoDB与MyISAM详解
  • Mikan Project:终极动漫追番神器,三步打造你的专属追番体验
  • OpenClaw开源贡献指南:为ollama-QwQ-32B编写自定义技能模块
  • Mac本地AI绘画完全指南:用Mochi Diffusion释放创意潜能
  • Linux环境下KingbaseES V8 R6安装与配置全攻略
  • Win11Debloat:释放Windows潜能的系统优化解决方案
  • 5大突破让低配电脑玩转AI绘画:FLUX.1-dev模型优化技术全解析
  • OpenClaw配置备份指南:Qwen3-32B镜像环境快速迁移
  • 告别选择困难:QtCreator写代码,VSCode调AI,我的混合开发效率翻倍秘诀
  • Lobe Theme:为Stable Diffusion WebUI注入现代设计美学的终极界面解决方案
  • Balena Etcher完整指南:5分钟学会安全烧录SD卡和USB设备
  • 【Zynq 进阶一】深度解析 PetaLinux 存储布局:NAND Flash 分区与 DDR 内存分配全攻略
  • MySQL服务启动失败:NET HELPMSG 3534错误全面解析与实战解决方案
  • 如何让老旧Mac突破系统限制:OCLP-Mod的创新适配方案
  • Windows 11终极优化指南:使用Win11Debloat实现系统性能翻倍
  • AssetBundle打包粒度指南:如何平衡内存占用与加载效率?
  • 如何彻底解决手柄漂移问题:DS4Windows摇杆死区深度调校终极指南
  • LabVIEW调用HTTPS接口的保姆级教程:从抓取CA证书到GET天气数据
  • 2026年03月27日全球AI前沿动态
  • RWKV7-1.5B-g1a镜像亮点:预编译CUDA kernel,避免运行时JIT编译卡顿
  • Vue3 实战:构建高效扫码枪监听与二维码解析组件
  • 星露谷物语农场规划器:3个关键问题解决你的布局困扰
  • Halcon报错21010/2036?三步搞定License和环境变量配置(附切换助手下载)
  • XML Notepad:Windows平台XML文档编辑与转换的完整解决方案
  • Frida实战:如何逆向分析某电商App的doCommandNative函数(附完整Hook脚本)
  • 开源协议技术解析与工程实践指南
  • LeetCode 380. Insert Delete GetRandom O(1) 题解
  • OpCore-Simplify技术解析:如何用四步流程破解黑苹果配置难题?
  • 深度学习驱动的图像去雾:2023年最新算法与应用实践
  • 深度解析腾讯王者荣耀AI开放环境:构建复杂MOBA游戏强化学习实战平台