SDUTOJ2128 두 갈래 정렬 트리
나무 구조에서 특수한 두 갈래 나무를 정렬 두 갈래 나무라고 하는데 직관적인 이해는 바로 (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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.