NC15844. 二叉树
描述
输入描述
第一行包含一个正整数T, 表示二叉树的个数
接下来有T组数据, 每组数据代表一棵二叉树信息, 格式如下:
每组数据第一行包含两个正整数m和r, 表示树上的节点数量和根节点的标号接下来的m行按1~m标号, 第i行包含标号为i的节点的信息:保证每组数据给的是一棵二叉树
包含三个非负整数v, a, b分别代表该节点的权值, 左儿子的节点标号和右儿子的节点标号(如果某儿子标号为0, 表示不存在该儿子)
输出描述
对于每组测试数据:
如果它是一颗二叉搜索树, 输出“yes”(不包括引号)
否则输出"no"(不包括引号)
示例1
输入:
3 3 1 4 2 3 3 0 0 5 0 0 3 1 4 0 2 5 0 3 5 0 0 4 4 4 2 3 3 0 0 5 0 0 4 1 0
输出:
yes yes no
C++(clang++ 11.0.1) 解法, 执行用时: 239ms, 内存消耗: 6768K, 提交时间: 2023-01-10 14:14:01
#include<bits/stdc++.h> using namespace std; const int MAXN = 80001; int L[MAXN]; int R[MAXN]; int W[MAXN]; vector<int> path; void dfs(int s) { if (!s) return; dfs(L[s]); path.push_back(W[s]); dfs(R[s]); } int main(){ int T; cin >> T; while (T--) { int m, r; cin >> m >> r; path.clear(); for (int i = 1; i <= m; i++) cin >> W[i] >> L[i] >> R[i]; dfs(r); if (is_sorted(path.begin(), path.end())) cout << "yes" << endl; else cout << "no" << endl; } }