题意:
给一个二叉树序列,判断是不是一颗二叉搜索树
思路:
根据给的二叉树序列先把树建立出来,然后前序遍历二叉树,如果这是一颗搜索二叉树的话,那么前序遍历的
序列一定是单调不递减的,所以我们只需要判断这个序列是不是单调不递减即可,还是考察对搜索二叉树的结构的理解
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 80000 + 5;
const int inf = 1e9 + 7;
const int mod = 1e9 + 7;
const double PI = acos(-1.0);
struct Node
{
int v,lch,rch;
}node[maxn];
bool flag;
vector <int> a;
void forder(int rt)
{
if(!rt) return ;
forder(node[rt].lch);
a.push_back(node[rt].v);
forder(node[rt].rch);
}
int main()
{
std::ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
memset(node,0,sizeof node);
flag = true;
int m,root;//节点数量和根节点标号
cin>>m>>root;
for(int i = 1; i <= m; i++){
int v,l,r;
cin>>v>>l>>r;
node[i].v = v,node[i].lch = l,node[i].rch = r;
}
a.clear();
forder(root);
for(int i = 0; i < a.size() - 1; i++){
if(a[i] > a[i + 1]){
flag = false;
break;
}
}
if(flag) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}

京公网安备 11010502036488号