hdoj3791
题目:
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
567432
543267
576342
0
NO
分析:
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std; //rst1保存第一个树的前序遍历结果,rst2保存后面n个树的前序遍历结果,index为这2个数组的下标
int rst1[];
int rst2[];
int index = ; class BST{
private:
struct Node{
int key;
Node* left;
Node* right; Node(){
this->key = ;
this->left = NULL;
this->right = NULL;
} Node(int num){
this->key = num;
this->left = NULL;
this->right = NULL;
} }; Node* root; Node* insert(Node* node, int num){
if (node == NULL){
count++;
return new Node(num);
}
if (node->key < num){
node->right = insert(node->right, num);
}
else if (node->key > num){
node->left = insert(node->left, num);
}
return node;
} //select用来选择前序遍历结果的保存位置
void preOrder(Node* node, int select){
if (node == NULL)
return;
if (select == )
rst1[index++] = node->key;
else if (select == )
rst2[index++] = node->key;
preOrder(node->left, select);
preOrder(node->right, select);
} void remove(Node* node){
if (node == NULL)
return;
remove(node->left);
remove(node->right);
delete node;
} public:
int count; BST(){
root = NULL;
count = ;
} ~BST(){
remove(root);
} void insert(int num){
root = insert(root, num);
} void preOrder(int select){
preOrder(root, select);
}
}; void str2int(char* s, int* arr){
for (int i = ; s[i] != '\0'; i++){
arr[i] = s[i] - '';
}
} int main()
{
int n; //第一个数n
while (scanf("%d", &n) != EOF && n != )
{
BST raw; //第一行序列
int num = ; //存储序列的数组
char tmp[];
int raw_seq[];
int test_seq[]; memset(tmp, , sizeof(tmp));
memset(raw_seq, -, sizeof(raw_seq));
scanf("%s", tmp);
str2int(tmp, raw_seq); for (int i = ; raw_seq[i] != - && i<; i++)
raw.insert(raw_seq[i]); for (int i = ; i<n; i++){
BST test; //接下来的n行序列
memset(tmp, , sizeof(tmp));
memset(test_seq, -, sizeof(test_seq));
scanf("%s", tmp);
str2int(tmp, test_seq);
for (int i = ; test_seq[i] != - && i<; i++)
test.insert(test_seq[i]); index = ;
raw.preOrder();
index = ;
test.preOrder(); int flag = ;
for (int i = ; i < index; i++)
if (rst1[i] != rst2[i]){
flag = ;
break;
} if (flag == )
printf("NO\n");
else if (flag == )
printf("YES\n");
}
}
return ;
}
hdoj3791的更多相关文章
随机推荐
- SpringMVC入门总结
一.SpringMVC的好处? 1,基于注解,stuts2虽然也有注解但是比较慢,没人用更多的时候是用xml的形式 2,能与spring其它技术整合比如说webflow等, 3,获取request及s ...
- Life In Changsha College- SQA计划与验收测试规程
本次任务 以前面小组完成的SCRUM设计任务作为背景,拟制软件开发任务的虚拟SQA计划. 编制前面小组完成的SCRUM设计任务的验收测试规程. SQA计划 验收测试规程 测试分析:工程完成的功能包括登 ...
- css 图片宽度、居中、倒影
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jchdl - GSL实例 - Add
https://mp.weixin.qq.com/s/6xcYYdYZTBPTf25xFluzBQ 使用FullAdder级联实现加法器 参考链接: https://github.com/wj ...
- JSON.parse() 的实现
目录 1. JSON.parse() 2. 前置知识 2.1 JSON格式中的数据类型 2.2 转义字符的处理 2.2 判断对象是否相等 2.3 寻找匹配的字符串 2.4 基础的递归思想 3. 实现流 ...
- 实现 (5).add(3).minus(2),使其输出结果为:6
function check(n) { n = Number(n); return isNaN(n) ? 0 : n; } function add(n) { n = check(n); return ...
- Java 从入门到精通-反射机制
导读 Java反射机制是开发者迈向结构化开发的重要一步,同时掌握了反射机制也就掌握了所有框架的核心实现思想. 认识反射机制 简单例子 通过以上的程序就会发现,除了对象的正向处理操作之外,还可以通过ge ...
- SpringSecurity(1)---认证+授权代码实现
认证+授权代码实现 Spring Security是 一种基于 Spring AOP 和 Servlet 过滤器的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和 ...
- Java实现 LeetCode 236 二叉树的最近公共祖先
236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x ...
- Android中如何使用Listview
第一步 首先在xml文件中声明一个List View控件,并且标明id (这一步其实不用说,怕自学Android的小白不懂,就好比当初的我,哈哈) <?xml version="1.0 ...