SDUTOJ2128 두 갈래 정렬 트리

2232 단어
제목 연결: 클릭 링크 열기
나무 구조에서 특수한 두 갈래 나무를 정렬 두 갈래 나무라고 하는데 직관적인 이해는 바로 (1)이다.각 노드에는 관건적인 값이 포함되어 있습니다 (2).임의의 노드의 왼쪽 트리 (존재한다면) 의 키 값은 이 노드의 키 값보다 작습니다 (3).임의의 노드의 오른쪽 트리 (존재한다면) 의 관건값은 이 노드의 관건값보다 크다.현재 한 조의 데이터를 지정합니다. 이 조의 데이터에 대해 주어진 순서에 따라 정렬 두 갈래 트리를 만들고 그 중의 정렬 결과를 출력하십시오.
 

입력


입력은 여러 그룹의 데이터를 포함하고 각 그룹의 데이터 형식은 다음과 같다.
첫 번째 줄은 정수 n을 포함하고 관건적인 값의 개수를 포함하며 관건적인 값은 정수로 표시한다.(n<=1000)
두 번째 줄은 n개의 정수를 포함하고 모든 정수가 int 범위 내에 있음을 보증합니다.

출력


주어진 데이터를 정렬하기 위해 두 갈래 트리를 만들고 그 중의 반복 결과를 출력합니다. 출력마다 한 줄을 차지합니다.
 
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

struct node
{
    int data;
    node *l,*r;
};
int n;
void Insert(node *&t,int data)
{
    if(t==NULL)
    {
        t = new node;
        t->l = t->r = NULL;
        t->data = data;
    }
    else
    {
        if(data < t->data)
            Insert( t->l , data);
        else
            Insert( t->r , data);
    }
}

node *root;

void Creat()
{
    for(int i=0; i<n; i++)
    {
        int x;
        scanf("%d",&x);
        Insert(root,x);
    }
}
int stk[1001],l;
void mid(struct node *T)
{
    if(T!=NULL)
    {
        mid(T->l);
        stk[l++] = T->data;

        mid(T->r);
    }
}
void Delete(struct node *t)
{
    if(t!=NULL)
    {
        Delete(t->l);
        Delete(t->r);
    }
    delete(t);
}

int main()
{

        while(scanf("%d",&n)!=EOF)
        {
            l = 0;
            root = NULL;
            Creat();
            mid(root);
            Delete(root);
            for(int i = 0;i<l-1;i++)
            {
                printf("%d ",stk[i]);
            }
            printf("%d
",stk[l-1]); } return 0; }

좋은 웹페이지 즐겨찾기