The order of a Tree HDU - 3999 (二叉搜索树)


题意:题意给出一个序列,构造一棵二叉搜索树,让你找一个序列,满足:能构成与给出的序列相同的二叉搜索树,同时,字典序最小。

思路:首先构造二叉搜索树,然后先序遍历输出即可。


#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include
#include<set>        
#include 
#include
#include    
#include
#include
#include
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");
    }
}

ACM