二叉搜索樹 題解 二叉搜索樹的構建 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.pswp.cn/web/10227.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10227.shtml
英文地址,請注明出處:http://en.pswp.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…