时间限制:1秒 内存限制:128M
题目描述
给定一棵二叉树,根据中序遍历的顺序,找到其中值为x的点(可能不止一个),说出它的中序遍历的上一个点是谁(如果是第一个点,则输出-1)。
输入描述
第一行两个数n和x,表示有n个点,并且要找的值为x(0 < n,x <= 100)。
接下来一行有n个数ai,第i个数表示第i个节点的数值为ai(根据层序遍历给出,若值为0,表示当前点不存在)。
输出描述
输出每个x中序遍历的前一个数
样例
输入
5 3 1 3 2 5 3
输出
5 3
提示
树的中序遍历为5 3 3 1 2
第一个3前面的数为5,第二个3前面的数为3

#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;//
const int N=1e5+10;
int a[N],s[N],n,x,p;
void zx(int pos){
if(a[pos*2]!=0) zx(pos*2);
s[p++]=a[pos];
if(a[pos*2+1]!=0) zx(pos*2+1);
}
int main(){//
cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>a[i];
}
zx(1);
for(int i=0;i<p;i++){
if(s[i]==x){
if(i==0){
cout<<-1<<endl;
}
else{
cout<<s[i-1]<<endl;
}
}
}
return 0;//
}
383

被折叠的 条评论
为什么被折叠?



