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");
    }
}

 

 


 

posted @ 2020-09-12 14:33  夜灯长明  阅读(151)  评论(0编辑  收藏  举报