题意:就是构建一棵树,然后先序输出就行了
代码如下:
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
#include<vector>
#include<queue>
using namespace std;
struct Node
{
bool have_value;
int v;
Node*left,*right;
Node():have_value(false),left(NULL),right(NULL) {}
};
vector<int> ans;
Node* root;
Node*newnode()
{
return new Node();
}
void addnode(int k,Node*root)
{
Node* u=root;
if(u->left==NULL)
u->left=newnode();
if(u->right==NULL)
u->right=newnode();
if(k<u->v&&!u->left->have_value)
{
u->left->v=k;
u->left->have_value=true;
return ;
}
else if(k>=u->v&&!u->right->have_value)
{
u->right->v=k;
u->right->have_value=true;
return;
}
else if(k<u->v&&u->left->have_value)
{
u=u->left;
addnode(k,u);
}
else if(k>=u->v&&u->right->have_value)
{
u=u->right;
addnode(k,u);
}
}
void dfs(Node *u)
{
if(u == NULL || !u->have_value) return ;
ans.push_back(u->v);
dfs(u->left);
dfs(u->right);
}
int main()
{
//freopen("in.txt","r",stdin);
int n,k,nod;
while(scanf("%d",&n) != EOF) {
scanf("%d",&nod);
root=newnode();
root->v=nod;
root->have_value=true;
for(int i=1; i<n; i++)
{
scanf("%d",&k);
addnode(k,root);
}
ans.clear();
dfs(root);
vector<int>::iterator it;
for( it = ans.begin(); it < ans.end()-1; it++ )
printf("%d ",*it);
printf("%d\n",ans.back());
}
return 0;
}