[자료구조실습] 수찾기

노은서·2024년 10월 21일

📌문제1. 수찾기

✅ 문제 설명

✅ 아이디어

N개의 정수를 읽어서 insert 연산을 이용해서 이진탐색트리를 생성
⭐ M개의 정수를 한 개씩 읽어서 이진탐색트리에 존재하면 1 출력, 존재하지 않으면 0을 출력
BST insert, search 함수를 사용해야함!!!

✅ 내가 짠 코드 (클래스 설계)

  • BinaryNode 클래스 설계
  • BinaryTree 클래스 설계 (멤버변수 : protected 선언)
  • BinSrchTree 클래스 설계
    ⭐⭐ search, insert 함수 정의해주기

✅ 내가 짠 코드 (메인 함수)

BinSrchTree tree; : 이진탐색트리 객체 생성해주기
tree.insert(new BinaryNode(n)); : 트리에는 노드를 삽입해야하므로, new BinaryNode로 노드를 생성해줘야함.

int main() {
	int N, M;
	int n,m;
	BinSrchTree tree;


	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> n;
		tree.insert(new BinaryNode(n));
	}
	
	cin >> M;
	for (int i = 0; i < M; i++) {
		cin >> m;
		tree.search(m);

	}

}

⚠️ BinaryNode* node를 선언 안한 이유

--> tree.insert(new BinaryNode(n));에서 바로 new BinaryNode(n)을 사용하면서 포인터 객체를 생성해서 따로 정의할 필요가 X
* BinaryNode node을 선언하면 아래와 같이 적어주면 됨.

BinaryNode* node = new BinaryNode(n);
tree.insert(node);

⚠️ new로 생성된 객체는 포인터임 --> 힙 메모리에 객체를 동적으로 생성, 그 객체의 주소를 반환

⚠️ BinaryTree 객체를 생성하면 이진 탐색 트리의 기능(search,insert)을 사용할 수 없음!!

⚠️ 객체를 직접 선언 VS 포인터로 객체를 선언

✔️ 객체를 직접 선언
: 함수 내에서 일시적으로 사용되는 객체, 명시적으로 메모리 해제를 할 필요가 없을 때
--> 객체는 스택 메모리에 할당됨
--> 만약에 BinSrchTree* tree로 선언하면 틀리진 않지만, 추가적인 메모리 관리가 필요함 --> 프로그램이 끝날 때 반드시 delete tree;로 메모리 해제해줘야함.
✔️ 포인터로 객체를 선언
: 여러 함수에서 객체를 공유하거나, 동적 할당이 필요할 때

profile
개발 & 공부 기록

0개의 댓글