什么是二叉搜索树

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是否同一棵二叉搜索树(不建树)相关推荐

  1. 5-4 是否同一棵二叉搜索树 (25分)

    https://pta.patest.cn/pta/test/15/exam/4/question/712 这道题考察二叉搜索树的实现,并且还需要一定的逻辑与算法,所以题目还是挺好的. 5-4 是否同 ...

  2. 7-4 是否同一棵二叉搜索树 (25 分)

    是否同一棵二叉搜索树 1.题目描述: 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入 ...

  3. 04-树4 是否同一棵二叉搜索树 (25 分)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  4. LeetCode 1214. 查找两棵二叉搜索树之和(二叉树迭代器+双指针)

    文章目录 1. 题目 2. 解题 1. 题目 给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target. 如果可以找到返回 True,否则返回 False. 示 ...

  5. 是否同一棵二叉搜索树

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  6. 7-1 是否同一棵二叉搜索树 (30分)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  7. 基础数据结构——是否同一棵二叉搜索树

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  8. 数据结构:判断是否为同一棵二叉搜索树

    前言碎语 作为一个代码小白,在自学的过程中,最舒服的好像就是有讲解.有提示.甚至直接是有源码--然而,照着写永远是无法进步的,因为,很可能最后错了自己都不知道错在了哪! 就比如下面这个,照着MOOC小 ...

  9. 7-1 是否同一棵二叉搜索树 (25 分)

    大一下半期数据结构 是否同一棵二叉搜索树 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1} ...

  10. 是否同一棵二叉搜索树_如何在同一台计算机上安装Java的多个版本

    是否同一棵二叉搜索树 一段时间以前,我写了一篇文章< 用示例解释Java Lambda表达式>,但是我很容易浏览Java 8,因为我在项目中使用了Java 8,并且允许我安装和使用它. 但 ...

最新文章

  1. MySQL:left join 避坑指南
  2. 机器学习笔试题精选(四)
  3. python判断变量不为空_Python简洁方法
  4. java 短信猫发送短信的方法
  5. laravel 5.1 php版本号,发行版本说明 | 序言 | Laravel 5.1 中文文档
  6. Spring Boot 入门 IDEA 版本 2小时学会springBoot 代码上传至gitee 或者github 事务没做出来
  7. vue+sortable实现表格拖拽
  8. 计算机的使用编码,计算机中使用的编码
  9. MYSQL学习心得6
  10. 计算机科学 期刊 模板,计算机学报投稿模板.doc
  11. ARM与RISC-V架构有哪些区别?
  12. luckysheet 国产超强纯前端在线excel表格功能强大 简单使用记录 异常报错记录及处理
  13. 基于socket的聊天工具
  14. 摊上事儿的网易邮箱和安全圈的那些“防御机制”
  15. 架也不吵了!谷歌大脑、DeepMind团结对抗OpenAI
  16. 2012年第三届C/C++ B组蓝桥杯省赛真题
  17. 《高级计算机网络》之物联网——大连理工大学研究生课程整理笔记(非常详细,通俗易懂)
  18. 野狐网游分析手记(2016年3月28日更新)
  19. Linux内核之各个SIG信号含义
  20. 基于java的山西菜谱管理系统_家庭食谱菜谱管理系统的设计与实现(JSP,SQLServer)(含录像)...

热门文章

  1. 用python+sklearn(机器学习)实现天气预报数据 数据
  2. 《随性集》:夜宴北城遇雨
  3. [渝粤教育] 西南科技大学 经济法概论 在线考试复习资料2021版(1)
  4. 有关NAT,私网IP怎么访问公网IP
  5. java数组更新_java数组
  6. 机器学习流程及详细内容(2)
  7. python双划线_python 单下划线与双下划线的区别
  8. 文件排序(用C语言描述)
  9. 解决同时安装搜狗输入法和谷歌输入法后fcitx无法使用
  10. 如何对机器学习进行测试?这本AI测试书给你指明了学习路线