문제 번호 1473. -- 2020-데이터구조-중간고사-2번

1473: 2020-데이터구조-중간고사-2번

시간 제한: 1 Sec  메모리 제한: 128 MB
제출: 249  해결 문제 수: 85
[제출][채점 상황 열람][게시판]

문제 설명

BST의 root 노드의 주소를 인수로 받아, BST 내에 저장된 숫자들 중 같은 숫자가

가장 많은 것은 어떤 숫자인지 반환하는 함수 findMode( )를 아래프로그램에서

구현하고 실행하시오.

예를 들어, BST 내에 저장된 숫자들이 1, 2, 3, 4, 2, 2 라면 2가 3번 나타나므로,

함수 findMode( )는 결과값으로 2를 반환하여야 한다.


BST내의 같은 숫자는 left subtree에 저장되며, 각 숫자들은 1개 이거나,

서로 다른 개수가 있다.


아래 프로그램에서 함수 findMode( )를 구현하고, 실행하시오.

findMode( )의 구현을 위해 추가 함수나 변수를 사용할 수 있지만,

기존 코드는 절대로 수정해서는 안된다.


점수를 얻을 목적으로 기존 코드를 훼손한 경우, 

부정행위로 간주하여 중간고사를 0점 처리함.

#include <stdio.h>
#include <stdlib.h>

struct bst_node
{
	int value;
	struct bst_node* left;
	struct bst_node* right;
};

struct bst_node* root = 0;

void doMistery(int _v)
{
	struct bst_node* cur = 0;
	struct bst_node* temp = root;

	cur = (struct bst_node*)malloc(sizeof(struct bst_node));
	cur->left = cur->right = 0;
	cur->value = _v;

	if (root == 0)
	{
		root = cur;
		return;
	}

	while (1)
	{
		if (_v <= temp->value)
		{
			if (temp->left == 0)
			{
				temp->left = cur;
				return;
			}
			temp = temp->left;
		}
		else
		{
			if (temp->right == 0)
			{
				temp->right = cur;
				return;
			}
			temp = temp->right;
		}
	}
}

int findMode(struct bst_node* _root)
{

	/* 이 곳을 완성하시오 */
	/* 새로운 함수를 만드는 것은 허용하지만,
	   기존 코드를 수정하면 0점 처리함. */
}


int main(void)
{
	int v;
	while (1)
	{
		scanf("%d", &v);
		if (v == -999)
		{
			break;
		}
		doMistery(v);
	}
    
	printf("%d", findMode(root));

	return 0;
}


입력

출력

도움말

출처

[제출][채점 상황 열람]