二叉搜索树 题解 二叉搜索树的构建 DFS

二叉搜索树

题目描述

判断两序列是否为同一个二叉搜索树序列。

输入描述

第一行是一个数 n ( 1 <= n <= 20 ),表示有 n 个二叉搜索树序列需要判断。
接下去一行是一个序列,序列长度小于 10 ,包含 0 ~ 9 的数字,没有重复数字,根据这个序列可以构造出一棵二叉搜索树。
接下去的 n 行有 n 个序列,每个序列格式跟第一个序列一样,请判断这两个序列——该行序列和第二行序列是否能组成同一棵二叉搜索树。

输出描述

对于最后 n 行的每一行询问,如果序列相同则输出 YES,否则输出 NO。

用例输入 1

2
567432
543267
576342

用例输出 1

YES
NO

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;struct node // 节点
{int val;node *lc, *rc;
};
bool ok;                     // 当前询问中两树是否相同
node *insert(node *p, int x) // 中序序列构建二叉搜索树
{if (p == NULL) // 当前节点为空{// 创建新节点node *new_node = new node;new_node->val = x;new_node->lc = NULL;new_node->rc = NULL;return new_node;}else // 当前节点不为空{// 二叉搜索树的遍历过程,从而找到应该建立新节点的位置if (p->val > x)p->lc = insert(p->lc, x);elsep->rc = insert(p->rc, x);return p;}
}
void check(node *standard_root, node *root)
{if (standard_root != NULL && root != NULL) // 两棵树该节点都不为空{// 中序遍历check(standard_root->lc, root->lc);if (standard_root->val != root->val) // 判断对应节点值是否相同{ok = false;return; // 若已确定答案,无需继续递归}check(standard_root->rc, root->rc);}else if (standard_root != NULL || root != NULL) // 一棵树有该节点,另一棵树没有对应节点,说明两树不相同{ok = false;return; // 若已确定答案,无需继续递归}
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;string s;cin >> n;node *standard_root = NULL;cin >> s;for (int i = 0; i < s.size(); i++) // 构建标准树standard_root = insert(standard_root, s[i] - '0');for (int i = 0; i < n; i++) // n个二叉搜索树,对应n个询问{ok = true; // 每次询问都要先初始化为truenode *root = NULL;cin >> s;for (int i = 0; i < s.size(); i++) // 构建询问树root = insert(root, s[i] - '0');check(standard_root, root); // 中序遍历,判断两棵树是否一致if (ok)cout << "YES" << '\n';elsecout << "NO" << '\n';}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】Kotlin学习之Lambda表达式

java和kotlin对比 Lambda语法 Lambda隐形参数 it 也可以不使用指定的名称it, 可以 自定义 Lambda 使用下划线

原来Python处理word这么简单:关于python操作文档的问题

关于python操作文档的问题 文档类型&#xff1a;docx 语言&#xff1a;python 我想在文档中姓名后面的下划线之上插入一个姓名&#xff0c;并保存为新的文档&#xff0c; 用python应该怎么实现呢 文档见下图 一般情况下&#xff0c;我们在看到题目的时候&#xff0c;应该先审题…

PHP+B/S架构 不良事件管理系统源码 医院不良事件报告系统源码,开发技术vue2+element+laravel8

PHPB/S架构 不良事件管理系统源码 医院不良事件报告系统源码&#xff0c;开发技术vue2elementlaravel8 技术架构&#xff1a;前后端分离&#xff0c;仓储模式&#xff0c;BS架构&#xff0c; 开发技术&#xff1a;PHPvscodevue2elementlaravel8mysql5.7&#xff0c;专业团队研…

[AutoSar]lauterbach_001_ORTI_CPUload_Trace

目录 关键词平台说明一、ORTI概述二、ORTI文件的生成三、ORTI文件的导入四、Trace 功能4.1 Trace 功能菜单介绍4.2 Trace功能的配置4.3 Trace MCDS 设置4.4 Task Switches断点的设置4.5 Trace 数据的录取4.6 CPU 负载和Task调度的查看 关键词 嵌入式、C语言、autosar、OS、BSW…

【高阶数据结构】图--最短路径问题

图--最短路径问题 一、单源最短路径--Dijkstra算法1、简介2、解析3、代码4、测试用例5、打印最小路径代码和测试6、缺陷&#xff1a;不能使用负路径 二、单源最短路径--Bellman-Ford算法1、简介2、解析&#xff08;1&#xff09;详情i、负权问题&#xff1a;一个点只跑一趟找最…

A股行情订阅工具,支持股票/可转债level2/level2数据

简单使用 ./hqCenter -h-initCodesFile string启动即订阅的code (default "./data/initCodes.json")-listen stringhttp监听地址 (default ":31800")-saveHqFile string行情写入文件,自动加日期后缀。为空则不写入文件。 (default "./data/hq")-…

PostGIS之pointcloud

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;14 文档用途 本文详细介绍pointcloud&#xff0c;包括&#xff1a;安装配置、两个核心数据类型、功能函数、使用PDAL读写pgpoingcloud数据等。 详…

学习前端第三十四天(call,apply,函数绑定;箭头函数;对象属性配置)

一、call、apply function fn(x, y) { console.log("hello", x, y, this) }; 1.call方法 作用&#xff1a;调用后执行函数&#xff0c;可以给“this”传参数 fn.call({ a: 1 }, 1, 2,); 2.apply方法 第一个给“this”传参数&#xff0c;第二个参数需要是数组形式…

ElementUi中el-table组件使用row-class-name修改指定行颜色

可以通过指定 Table 组件的 row-class-name 属性来为 Table 中的某一行添加 class&#xff0c;表明该行处于某种状态。 注意&#xff1a;如果在el-table中使用了stripe这个属性&#xff0c;这个属性是带斑马纹的表格样式&#xff0c;它和row-class-name共存时是没有效果。 注…

【微信开发】微信支付前期准备工作(申请及配置)

1、申请并配置公众号或微信小程序 1.1 账户申请 通过微信公众平台&#xff0c;根据指引申请微信小程序或公众号&#xff0c;申请时需要微信认证&#xff0c;申请流程不在赘述 1.2 信息配置 申请通过后&#xff0c;需进入小程序和公众号内进行信息配置 1.2.1 小程序信息配置…

Mac YOLO V9推理测试(基于ultralytics)

环境&#xff1a; Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 使用YOLO一般都会接触ultralytics这个框架&#xff0c;今天来试试用该框架进行YOLO V9模型的推理。 YOLOv9目前提供了四种模型下载&#xff1a;yolov9-c.pt、yolov9-e.pt、gelan-c.p…

lint 代码规范,手动修复,以及vscode的第三方插件eslint自动修复

ESlint代码规范 不是语法规范&#xff0c;是一种书写风格&#xff0c;加多少空格&#xff0c;缩进多少&#xff0c;加不加分号&#xff0c;类似于书信的写作格式 ESLint:是一个代码检查工具&#xff0c;用来检查你的代码是否符合指定的规则(你和你的团队可以自行约定一套规则)…

【管理篇】如何横向沟通?

目录标题 什么是横向沟通&#xff1f;常见沟通问题 如何处理横向沟通中的问题&#xff1f; 什么是横向沟通&#xff1f; 所谓横向沟通&#xff0c;就是和没有直接汇报关系的合作方之间的沟通&#xff0c;指的是与平级间进行的与完成工作有关的交流&#xff1b;横向沟通核心的挑…

mqtt定时脚本

需求描述 给mqtt的topic发送信息 对应的topic接收请求后&#xff0c;执行发送短信指令 信息内容 SMS,10086,102 lua的mqtt里面&#xff0c;截取判断即可 –>可以实现 定时任务&#xff0c; 每月开机一次 发短信&#xff1f; 或者使用开机通知&#xff1f; 定时消费…

Npm Install Docusaurus Demo【npm 安装 docusaurus 实践 】

文章目录 1. 简介2. 前提2.1 安装 git2.2 安装 node 3. 安装4. 项目结构5. 访问5.1 localhost 访问5.2 ip 访问 1. 简介 Docusaurus 是一个facebook的开源项目&#xff0c;旨在帮助开发者构建易于维护和部署的文档网站。它提供了一个简单的方法来创建专业的文档网站&#xff0…

共享旅游卡免费旅游真实反馈,有图有真相?

新伙伴体验&#xff0c;云南昆大丽6天5晚品质双人游&#xff0c;真实反馈&#xff01;珠海伙伴蔡总&#xff0c;加入千益畅行共享旅游卡团队&#xff0c;自己亲自体验“云南昆大丽6天5晚品质双人游”真实反馈&#xff0c;分享全程内容截图&#xff0c;无半点虚假&#xff01; …

2024-05-08 postgres-调试及分析-记录

摘要: 2024-05-08 postgres-调试及分析-记录 DDL: 创建库表及插入数据&#xff1a; create database d1;\c d1;create table t1( a int, b int ); create table t2( a int, b int );insert into t1(a,b) values(3,4); insert into t1(a,b) values(5,6);insert into t2(a,b) va…

MongoDB聚合运算符:$trim

MongoDB聚合运算符&#xff1a;$trim 文章目录 MongoDB聚合运算符&#xff1a;$trim语法使用空白字符 举例 $trim用来删除字符串开头和结尾的空白字符&#xff08;包括空值&#xff09;或指定字符。 语法 { $trim: { input: <string>, chars: <string> } }input&…

react经验15:拖拽排序组件dnd-kit的使用经验

应用场景 列表中的成员可鼠标拖拽改变顺序 实施步骤 前置引入 import type { DragEndEvent } from dnd-kit/core import { DndContext } from dnd-kit/core import {arrayMove,/*垂直列表使用verticalListSortingStrategy,横向列表使用horizontalListSortingStrategy*/vert…