https://vjudge.net/problem/22959/origin
题意及思路: 构建二叉排序树 并输出它的前序遍历;
#include <stdio.h>
#include <string.h>
#include<functional>
#include <algorithm>
#include <iostream>
#include <queue>
#include<cmath>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
const int maxn = 100000 + 10;
typedef long long ll;
int a[maxn];
struct Node
{
int data;
Node *left;
Node *right;
};
int n;
void inserts(Node *(&t),int x)
{
if(t == NULL)
{
t = new Node;
t -> data = x;
t -> left = t -> right = NULL;
return;
}
else
{
if(x > t -> data)
{
inserts(t -> right,x);
}
else inserts(t -> left,x);
}
}
Node* Creat_tree(Node *tree)
{
tree -> data = a[0];
for(int i = 1; i < n; i ++)
{
inserts(tree,a[i]);
}
return tree;
}
queue<int>ans;
void pre_Print(Node* t)
{
if(t == NULL)
return;
ans.push(t -> data);
pre_Print(t -> left);
pre_Print(t -> right);
}
int main()
{
while( ~ scanf("%d",&n))
{
for(int i = 0; i < n; i ++)
scanf("%d",&a[i]);
Node *tree = new Node;
tree -> left = tree -> right = NULL;
Creat_tree(tree);
pre_Print(tree);
while(!ans.empty())
{
int t = ans.front();
ans.pop();
if(ans.empty())
cout << t << endl;
else cout << t << " ";
}
}
return 0;
}