# Tree: Postorder Traversal (Trees)
[문제]
[코드]
void postOrder(struct node *root) {
if(root)
{
postOrder(root->left);
postOrder(root->right);
printf("%d ", root->data);
}
}
[코드설명]
재귀적 호출로 해결했다.
왼쪽 노드와 오른쪽 노드로 순차적으로 내려간 다음, 다시 올라오면서 노드의 data를 출력한다.
[채점 결과]
# Maximum Element (Stacks)
[문제]
[코드]
int stack[100000];
int top = -1;
void push(char *item)
{
char ch;
int val = 0;
if (top == 99999)
return;
for (int i = 2; (ch = item[i]) != '\0'; i++)
{
val *= 10;
val += ch - '0';
}
stack[++top] = val;
}
int pop()
{
if (top == -1)
return -1;
return stack[top--];
}
int stack_max()
{
int max = 0;
for (int i = 0; i <= top; i++)
max = max > stack[i] ? max : stack[i];
return max;
}
int* getMax(int operations_count, char** operations, int* result_count) {
int* res, pos = 0;
res = (int*)malloc(operations_count * sizeof(int));
for (int i = 0; i < operations_count; i++)
{
switch (operations[i][0])
{
case '1': push(operations[i]); break;
case '2': pop(); break;
case '3': res[pos++] = stack_max(); (*result_count)++;
}
}
return res;
}
[코드설명]
stack을 활용하여 해결.
push와 pop 함수를 정의하고, stack의 max값을 리턴하는 함수 정의.(이때 push는 문자열을 정수로 변환하여 저장)
동적할당으로 stack의 max값을 저장해줄 공간을 생성(operation_count만큼).switch문으로 맨 처음 입력 문자가 각각 '1', '2', '3'인 경우로 나누어 처리.'1'인 경우 push, '2'인 경우 pop, '3'인 경우는 stack의 max값을 res 배열에 저장하고, *(result_count)의 값 1증가.모든 입력에 대한 처리가 끝나면 res 반환.
[채점 결과]