The order of a Tree HDU - 3999 (二叉搜索树)
题意:题意给出一个序列,构造一棵二叉搜索树,让你找一个序列,满足:能构成与给出的序列相同的二叉搜索树,同时,字典序最小。
思路:首先构造二叉搜索树,然后先序遍历输出即可。
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstring> #include<stdio.h> #include<algorithm> #include<map> #include<queue> #include<set> #include <sstream> #include<vector> #include<cmath> #include<stack> #include<time.h> #include<ctime> using namespace std; #define inf 1<<30 #define eps 1e-7 #define LD long double #define LL long long #define maxn 1000005 #define ll unsigned long long int n; int a[maxn] = {}; struct node { int num; node* Lchild=NULL; node* Rchild=NULL; }; node* add(node* tree, int k) { if (tree == NULL) { tree = new node(); tree->num = k; tree->Lchild = NULL; tree->Rchild = NULL; } else if (k < tree->num) { tree->Lchild = add(tree->Lchild, k); } else { tree->Rchild = add(tree->Rchild, k); } return tree; } void PreOrder(node* tree, int flag) { if (flag == 1) printf("%d", tree->num); else printf(" %d", tree->num); if (tree->Lchild != NULL) PreOrder(tree->Lchild, 0); if (tree->Rchild != NULL) PreOrder(tree->Rchild, 0); } int main() { while (~scanf("%d", &n)) { node* Tree=NULL; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); Tree=add(Tree, a[i]); } PreOrder(Tree, 1); printf("\n"); } }