这题的主要思路就是根据题目给的前序遍历构造一颗二叉搜索树和其镜像。对构造好的树前序遍历一下,判断是否与题目给的相同。如果相同,输出后序遍历即可。证明根据这个序列确定的二叉搜索树是唯一的

#include <iostream>
#include <string.h>
#include <cstdio>
#define maxn 1005
using namespace std;struct node
{int data;node *l,*r;
};
int pre[maxn];
int n,p=0;
int f1=0,f2=1;
node* build(node *root,int v)
{node *t;if(root==NULL){t=new node;t->data=v;t->l=t->r=NULL;return t;}if(root->data > v)root->l=build(root->l,v);elseroot->r=build(root->r,v);return root;
}
node* rbuild(node *root,int v)
{node *t;if(root==NULL){t=new node;t->data=v;t->l=t->r=NULL;return t;}if(root->data <= v)root->l=rbuild(root->l,v);elseroot->r=rbuild(root->r,v);return root;
}
void judge(node *root)
{if(root){if(root->data!=pre[p++]){f1=1;return;}else{judge(root->l);judge(root->r);}}
}
void DFS(node *root)
{if(root==NULL)return;DFS(root->l);DFS(root->r);if(f2){printf("%d",root->data);f2=0;}elseprintf(" %d",root->data);
}
int main()
{node *root;root=NULL;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&pre[i]);root=build(root,pre[i]);}judge(root);if(f1==0){printf("YES\n");printf("\n");return 0;}else{f1=0;f2=1;p=0;root=NULL;for(int i=0;i<n;i++)root=rbuild(root,pre[i]);judge(root);if(f1==0){printf("YES\n");DFS(root);printf("\n");}elseprintf("NO\n");}return 0;
}

View Code

转载于:https://www.cnblogs.com/FTA-Macro/p/10461876.html

PAT L2-004 这是二叉搜索树吗 [二叉搜索树]相关推荐

  1. 【数据结构与算法】二叉堆与二叉搜索树的区别

    问题描述 记得刚学习数据结构的时候,就容易混淆二叉堆和二叉搜索树,其实虽说堆也是一种完全二叉树,但二者差别还是挺大的,本文试做分析. 逻辑结构 二叉堆和二叉搜索树都是结点带权重,并在父子结点间满足某种 ...

  2. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  3. 二叉堆与二叉堆的构建

    什么是二叉堆? 二叉堆本质上是一种完全二叉树,它分为两个类型: 最大堆:任何一个父节点的值,都大于或等于它左.右孩子节点的值. 最小堆:任何一个父节点的值,都小于或等于它左.右孩子节点的值. 二叉堆的 ...

  4. 魔方还原算法(二) 科先巴的二阶段算法

    科先巴的二阶段算法 本文来具体介绍一种具体的魔方还原算法--科先巴的二阶段算法,有一部分相关内容在前篇讲述,主要是方向定义那一块儿,没有看的建议先看一下: 二阶段,顾名思义,解决问题分为两步,先完成一 ...

  5. 决策树算法模型的归类与整理(ID3&C4.5&CART&线性二分类&非线性二分类)

    决策树算法模型的归类与整理(ID3&C4.5&CART&线性二分类&非线性二分类) 一. 总结摘要 决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归. ...

  6. 趣谈网络协议笔记-二(第十二讲)

    趣谈网络协议笔记-二(第十二讲) TCP协议(下):西行必定多妖孽,恒心智慧消磨难 前言 哈哈哈,越当我看刘超的通俗讲解,我就越感觉自己的无能.每次当我看了讲解之后,每次当我感觉到这个东西原来是这么简 ...

  7. 【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

    文章目录 一.验证二维数组内存是线性的 1.打印二维数组 2.以一维数组方式打印二维数组 3.打印二维数组值和地址 二.完整代码示例 一.验证二维数组内存是线性的 验证二维数组内存是线性的 : 验证方 ...

  8. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

    文章目录 一.二维数组 1.二维数组声明及初始化 2.二维数组遍历 3.二维数组排序 二.完整代码示例 一.二维数组 前几篇博客中 , 介绍的是指针数组 ; 指针数组 的 结构特征 是 , 数组中的每 ...

  9. ML之分类预测之ElasticNet:利用ElasticNet回归对二分类数据集构建二分类器(DIY交叉验证+分类的两种度量PK)

    ML之分类预测之ElasticNet:利用ElasticNet回归对二分类数据集构建二分类器(DIY交叉验证+分类的两种度量PK) 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 # ...

  10. 计算机图形学二维变换知识点,计算机图形学 二维变换及二维.ppt

    计算机图形学 二维变换及二维 第三章 二维变换及二维观察 本章主要内容 3.1二维图形的基本变换 3.2窗口视图变换 3.3复合变换 3.4二维图形裁剪 3.5本章小结 3.1 二维图形的基本变换 3 ...

最新文章

  1. java 可控异常_java异常处理,重新认识java异常,java7异常处理的新特性!
  2. Android Hook (1) Dexposed原理
  3. 哈夫曼编码的非树节点形式实现
  4. python代码删掉了几行怎么撤回_78行Python代码实现现微信撤回消息功能
  5. Linux之VI命令详解
  6. 【渝粤题库】国家开放大学2021春1439临床药理学题目
  7. 实战02_SSM整合ActiveMQ支持多种类型消息
  8. B端页面——详细表单设计流程
  9. html与css重置代码,发个自己的CSS重置基础代码
  10. 2013dgtcs 数对
  11. autojs脚本代码大全(实战演练1)
  12. matlab 分组求平均值,MATLAB:取一个列表中两个数字的平均值?(MATLAB: taking the average of two numbers in a list?)...
  13. SQL注入漏洞-SQL注入中information_schema的作用
  14. SSH连接服务器断开
  15. 中文菜单的html编辑器,如何更改IE查看源代码菜单使用的HTML编辑器
  16. 使用 Telnet 手动接收邮件 (基于 macOS 系统)
  17. 关于ONVIF协议你不得不知的6个常见问题
  18. qq看点怎么引流?如何通过QQ看点引流营销?
  19. SSM ==> 超市管理系统(mysql)
  20. loadrunner入门教程(33) -- Analysis图

热门文章

  1. xml property标签注入一个类变量_依赖注入的学习
  2. python怎么编程hello world用geany_第一个Hello World 程序
  3. python 封装_Python面向对象之封装
  4. filecoin 密封手续费_解密Filecoin测试网:全球排名登顶的秘密
  5. C++中的set(STL的应用部分)
  6. java 名称可以包含-吗_java – 验证失败时包含参数名称的自定义...
  7. 【PATL2-002】链表去重(链表模拟)---水题
  8. hdoj1058:Humble Numbers(dp基础题+技巧筛法)
  9. hdu 5446 Lucas+中国剩余定理(孙子定理)+按位乘
  10. 常见的html内lian联元素,CSS基础:块元素、内联元素、内联块元素