7-4是否同一棵二叉搜索树(不建树)
什么是二叉搜索树?
1.节点的左子树只包含小于当前节点的数。
2.节点的右子树只包含大于当前节点的数。
3.所有左子树和右子树自身必须也是二叉搜索树。
7-4 是否同一棵二叉搜索树 (25分)
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。
输入格式:
输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后L行,每行给出N个插入的元素,属于L个需要检查的序列。
简单起见,我们保证每个插入序列都是1到N的一个排列。当读到N为0时,标志输入结束,这组数据不要处理。
输出格式:
对每一组需要检查的序列,如果其生成的二叉搜索树跟对应的初始序列生成的一样,输出“Yes”,否则输出“No”。
输入样例:
4 2
3 1 4 2
3 4 1 2
3 2 4 1
2 1
2 1
1 2
0
输出样例:
Yes
No
No
本题思路:
以两个序列的首元素为根节点,如果相等将序列中所有小于根节点的元素组成新的左子树序列,将所有大于根节点的元素组成新的右子树序列。根据二叉搜索树定义的第三条,递归判断左子树与右子树是否同时相同就行。
过题代码如下:
#include <bits/stdc++.h>using namespace std;void Input(vector<int>& r, int N)
{r.resize(N);for (int i = 0; i < N; ++i){cin>>r[i];}
}bool helper(vector<int>& r1, vector<int>& r2)
{if (r1.size() == 0) return true; //空树返回真if (r1.size() == 1) return r1[0] == r2[0]; //到了叶子节点就 判断是否相等if (r1[0] != r2[0]) return false;//根节点不相等直接返回假vector<int> r1_left, r1_right, r2_left, r2_right;for (int i = 1; i < r1.size(); ++i){if (r1[i] < r1[0]) r1_left.push_back(r1[i]);//左子树序列if (r1[i] > r1[0]) r1_right.push_back(r1[i]);//右子树序列}for (int i = 1; i < r2.size(); ++i){if (r2[i] < r2[0]) r2_left.push_back(r2[i]);if (r2[i] > r2[0]) r2_right.push_back(r2[i]);}return helper(r1_left, r2_left) && helper(r1_right, r2_right);
}int main()
{int N, L;while (cin>>N && N != 0){vector<int> r1, r2;cin>>L;Input(r1, N);for (int i = 0; i < L; ++i){Input(r2, N);cout<<(helper(r1, r2) == 1? "Yes":"No")<<endl;}}return 0;
}
7-4是否同一棵二叉搜索树(不建树)相关推荐
- 5-4 是否同一棵二叉搜索树 (25分)
https://pta.patest.cn/pta/test/15/exam/4/question/712 这道题考察二叉搜索树的实现,并且还需要一定的逻辑与算法,所以题目还是挺好的. 5-4 是否同 ...
- 7-4 是否同一棵二叉搜索树 (25 分)
是否同一棵二叉搜索树 1.题目描述: 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入 ...
- 04-树4 是否同一棵二叉搜索树 (25 分)
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- LeetCode 1214. 查找两棵二叉搜索树之和(二叉树迭代器+双指针)
文章目录 1. 题目 2. 解题 1. 题目 给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target. 如果可以找到返回 True,否则返回 False. 示 ...
- 是否同一棵二叉搜索树
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- 7-1 是否同一棵二叉搜索树 (30分)
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- 基础数据结构——是否同一棵二叉搜索树
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- 数据结构:判断是否为同一棵二叉搜索树
前言碎语 作为一个代码小白,在自学的过程中,最舒服的好像就是有讲解.有提示.甚至直接是有源码--然而,照着写永远是无法进步的,因为,很可能最后错了自己都不知道错在了哪! 就比如下面这个,照着MOOC小 ...
- 7-1 是否同一棵二叉搜索树 (25 分)
大一下半期数据结构 是否同一棵二叉搜索树 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1} ...
- 是否同一棵二叉搜索树_如何在同一台计算机上安装Java的多个版本
是否同一棵二叉搜索树 一段时间以前,我写了一篇文章< 用示例解释Java Lambda表达式>,但是我很容易浏览Java 8,因为我在项目中使用了Java 8,并且允许我安装和使用它. 但 ...
最新文章
- MySQL:left join 避坑指南
- 机器学习笔试题精选(四)
- python判断变量不为空_Python简洁方法
- java 短信猫发送短信的方法
- laravel 5.1 php版本号,发行版本说明 | 序言 | Laravel 5.1 中文文档
- Spring Boot 入门 IDEA 版本 2小时学会springBoot 代码上传至gitee 或者github 事务没做出来
- vue+sortable实现表格拖拽
- 计算机的使用编码,计算机中使用的编码
- MYSQL学习心得6
- 计算机科学 期刊 模板,计算机学报投稿模板.doc
- ARM与RISC-V架构有哪些区别?
- luckysheet 国产超强纯前端在线excel表格功能强大 简单使用记录 异常报错记录及处理
- 基于socket的聊天工具
- 摊上事儿的网易邮箱和安全圈的那些“防御机制”
- 架也不吵了!谷歌大脑、DeepMind团结对抗OpenAI
- 2012年第三届C/C++ B组蓝桥杯省赛真题
- 《高级计算机网络》之物联网——大连理工大学研究生课程整理笔记(非常详细,通俗易懂)
- 野狐网游分析手记(2016年3月28日更新)
- Linux内核之各个SIG信号含义
- 基于java的山西菜谱管理系统_家庭食谱菜谱管理系统的设计与实现(JSP,SQLServer)(含录像)...