UVA-122(Trees on the level)
제목 링크:
https://vjudge.net/problem/UVA-122
제목:
입력 () 이 끝 날 때 까지 트 리 를 만 들 고 트 리 가 완전 한 지 판단 할 수 있 도록 (...) 트 리 를 만 들 수 있 습 니 다. 노드 가 할당 되 지 않 거나 할당 되 지 않 으 면 계층 별로 출력 트 리 를 옮 겨 다 닙 니 다. 그렇지 않 으 면 not complete 를 출력 합 니 다.
코드:
#include
#include
#include
#include
#include
#include
#include
const int maxn=10010;
using namespace std;
typedef struct node
{
int data;
struct node *lchild;
struct node *rchild;
};
bool judge(node *b)
{
queue q;
while(!q.empty()) q.pop();
q.push(b);
while(!q.empty())
{
node *u = q.front();
q.pop();
if(u->data < 0) return false;
if(u->lchild != NULL)q.push(u->lchild);
if(u->rchild != NULL)q.push(u->rchild);
}
return true;
}
void LevelOrder(node *b)
{
node *p;
queue q;
while(!q.empty())q.pop();
q.push(b);
while(!q.empty())
{
p = q.front();
q.pop();
if(p->data == b->data) printf("%d",p->data);
else printf(" %d",p->data);
if(p->lchild!=NULL) q.push(p->lchild);
if(p->rchild!=NULL) q.push(p->rchild);
}
printf("
");
}
void Destroy(node *&b)
{
node *p;
queue q;
while(!q.empty())q.pop();
q.push(b);
while(!q.empty())
{
p = q.front();
q.pop();
if(p->lchild!=NULL) q.push(p->lchild);
if(p->rchild!=NULL) q.push(p->rchild);
free(p);
}
}
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
node *root;
root = (node *)malloc(sizeof(node));
root->lchild = NULL;
root->rchild = NULL;
root->data = -1;
char s[maxn],number[maxn];
int i,flag=0;
node *p,*b;
while(scanf("%s",s)!=EOF)
{
// printf("%s
",s);
if(strcmp(s,"()")!=0)
{
int j=0;
for(i=1; ilchild==NULL)
{
b = (node *)malloc(sizeof(node));
p->lchild = b;
b->data = -1;
b->lchild = NULL;
b->rchild = NULL;
p=b;
}
else
p = p->lchild;
}
else if(s[i]=='R')
{
if(p->rchild==NULL)
{
b = (node *)malloc(sizeof(node));
p->rchild = b;
b->data = -1;
b->lchild = NULL;
b->rchild = NULL;
p=b;
}
else
p = p->rchild;
}
i++;
}
if(p->data<0) p->data = atoi(number);
else flag=1;
}
else
{
if(judge(root)&&flag!=1)
{
LevelOrder(root);
Destroy(root);
root = (node *)malloc(sizeof(node));
root->lchild = NULL;
root->rchild = NULL;
root->data = -1;
flag=0;
}
else
{
printf("not complete
");
Destroy(root);
root = (node *)malloc(sizeof(node));
root->lchild = NULL;
root->rchild = NULL;
root->data = -1;
flag=0;
}
}
}
return 0;
}
// not complete
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.