L2-004. 这是二叉搜索树吗?
Posted diamondDemand
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L2-004. 这是二叉搜索树吗?相关的知识,希望对你有一定的参考价值。
参考:https://www.liuchuo.net/archives/2155,牛逼的同志,此致敬礼
#include <iostream>
#include <vector>
using namespace std;
vector<int> post;
vector<int> pre;
bool isMirror;
//这里使用递归的思想,首先判断是不是有树,如果有,首先拿到左子树和右子树访问,然后把根节点压栈。这正好就是后序遍历的思想,最后访问,是故最后顺序输出就好
void postTraversal(int root, int tail)
{
if(root>tail)
return;
int i = root + 1, j = tail;
if(!isMirror)
{
while(i<=tail&&pre[i]<pre[root]) i++;
while(j>root&&pre[j]>=pre[root]) j--;
}
else
{
while(i<=tail&&pre[i]>=pre[root]) i++;
while(j>root&&pre[j]<pre[root]) j--;
}
if(i-j!=1)
return;
postTraversal(root+1, j);
postTraversal(i, tail);
post.push_back(pre[root]);
}
int main()
{
int n;
cin >> n;
pre.resize(n);
for(int i=0; i<n; i++)
cin >> pre[i];
postTraversal(0, n-1);
if(post.size()!=n)
{
post.clear();
isMirror = true;
postTraversal(0, n-1);
}
if(post.size()==n)
{
cout << "YES" << endl;
cout << post[0];
for(int i=1; i<n; i++)
cout << " " << post[i];
}
else
cout << "NO";
return 0;
}
以上是关于L2-004. 这是二叉搜索树吗?的主要内容,如果未能解决你的问题,请参考以下文章
PTA L2-004 这是二叉搜索树吗?-判断是否是对一棵二叉搜索树或其镜像进行前序遍历的结果 团体程序设计天梯赛-练习集