【1043】Is It a Binary Search Tree (25 分)

简介: 【1043】Is It a Binary Search Tree (25 分)【1043】Is It a Binary Search Tree (25 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;
//镜像树的先序遍历只需在原树先序遍历时交换左右子树的访问顺序
struct node{
  int data; //数据域
  node *left,*right; //指针域
};
void insert(node* &root,int data){//注意地址的地址
  if(root == NULL){//到达空结点时,即为需要插入的位置
    root = new node;
    root->data=data;
    root->left=root->right=NULL; //此句不能为空
    return;
  }
  if(data < root->data)   insert(root->left,data);//插在左子树
  else insert(root->right,data);
}
void preOrder(node* root,vector<int>&vi){  //先序遍历,结果存在vi
  if(root == NULL) return;
  vi.push_back(root->data);
  preOrder(root->left,vi);
  preOrder(root->right,vi);
}
//镜像树先序遍历,结果存放于vi
void preOrderMirror(node* root,vector<int>&vi){
  if(root == NULL) return;
  vi.push_back(root->data);
  preOrderMirror(root->right,vi);
  preOrderMirror(root->left,vi);
}
void postOrder(node* root,vector<int>&vi){ //后序遍历,结果存放于vi
  if(root == NULL) return;
  postOrder(root->left,vi);
  postOrder(root->right,vi);
  vi.push_back(root->data);
}
//镜像树后序遍历,结果存放于vi
void postOrderMirror(node* root,vector<int>&vi){
  if(root == NULL) return;
  postOrderMirror(root->right,vi);
  postOrderMirror(root->left,vi);
  vi.push_back(root->data);
}
//origin存放初始序列
//pre,post为先序,后序,preM,postM为镜像树先序,后序
vector<int> origin,pre,preM,post,postM;
int main(){   
   int n,data;
   node* root=NULL; //定义头结点
   scanf("%d",&n); //输入结点个数
   for(int i=0;i<n;i++){
     scanf("%d",&data);
     origin.push_back(data); //将数据加入origin
     insert(root,data); //将data插入二叉树
   }
   preOrder(root,pre); //求先序
   preOrderMirror(root,preM);//求镜像树先序
   postOrder(root,post); //求后序
   postOrderMirror(root,postM); //求镜像树后序
   if(origin == pre){ //初始序列等于先序序列!!注意可以这样vector比较!
     printf("YES\n");
     for(int i=0;i<post.size();i++){
       printf("%d",post[i]);
       if(i< post.size()-1)  printf(" ");
     }
   }else if(origin == preM){  //初始序列等于镜像树先序序列
     printf("YES\n");
     for(int i=0;i<postM.size();i++){
       printf("%d",postM[i]);
       if(i< postM.size()-1) printf(" ");
     }
   }else{
     printf("NO\n");  //否则输出NO
   }
  system("pause");
    return 0;   
}
相关文章
|
8月前
|
人工智能 弹性计算 运维
阿里云 MCP Server 开箱即用!
本文介绍了如何通过alibaba-cloud-ops-mcp-server和MCP(Model Context Protocol)实现AI助手对阿里云资源的复杂任务操作。内容涵盖背景、准备步骤(如使用VS Code与Cline配置MCP Server)、示例场景(包括创建实例、监控实例、运行命令、启停实例等),以及支持的工具列表和参考文档。借助这些工具,用户可通过自然语言与AI助手交互,完成ECS实例管理、VPC查询、云监控数据获取等运维任务,实现高效“掌上运维”。
|
10月前
|
存储 人工智能 前端开发
平替cursor : 全平台AI程序员插件,免费无广
平替cursor : 全平台AI程序员插件,免费无广。
622 11
|
10月前
|
人工智能 自然语言处理 物联网
阿里万相重磅开源,人工智能平台PAI一键部署教程来啦
阿里云视频生成大模型万相2.1(Wan)重磅开源!Wan2.1 在处理复杂运动、还原真实物理规律、提升影视质感以及优化指令遵循方面具有显著的优势,轻松实现高质量的视频生成。同时,万相还支持业内领先的中英文文字特效生成,满足广告、短视频等领域的创意需求。阿里云人工智能平台 PAI-Model Gallery 现已经支持一键部署阿里万相重磅开源的4个模型,可获得您的专属阿里万相服务。
|
9月前
|
Docker 容器
docker镜像加速问题
docker镜像加速问题
2970 1
docker镜像加速问题
|
人工智能 自然语言处理 数据可视化
通义灵码上新功能:用代码画流程图
不想读前人“骨灰级”代码,不想当“牛马”程序员,想像看图片一样快速读复杂代码和架构。通义灵码刚刚支持代码逻辑可视化,可以把你的每段代码画成流程图。像个脑图工具一样帮你图文并茂画出代码逻辑和框架,再也不用迷失在代码迷宫啦!
|
前端开发 JavaScript Android开发
前端开发中的跨平台框架选择与比较
在当今多样化的设备和平台上,前端开发人员面临着选择最佳跨平台框架的挑战。本文将介绍并比较几种流行的前端跨平台框架,帮助开发者更好地理解各自特点和适用场景。
|
IDE Java 开发工具
Java使用Scheduled注解实现定时任务功能
Java使用Scheduled注解实现定时任务功能
827 0
Java使用Scheduled注解实现定时任务功能
|
数据采集 监控 Kubernetes
【最佳实践】使用CloudLens排查iLogtail采集配置错误问题
本文主要介绍如何使用CloudLens for SLS定位和解决iLogtail日常使用中的常见问题之一:采集配置错误问题。
1255 0
【最佳实践】使用CloudLens排查iLogtail采集配置错误问题
|
20小时前
|
数据采集 人工智能 安全