#  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 반환.

 

[채점 결과]

 

 

 

 

 

복사했습니다!