자료구조 C 실습 · 이진 트리 · Q4
이진 트리 Q4. 홀수 값 노드의 합 구하기
C 파일 하나를 문제 하나로 보고 정리한 풀이 글이다.
이번 글은 함수가 실제로 어떤 연결, 순회, 변환을 수행하는지에 초점을 맞춘다.
이번 글은 함수가 실제로 어떤 연결, 순회, 변환을 수행하는지에 초점을 맞춘다.
Section E Binary Tree sumOfOddNodes
트리 전체를 순회하면서 값이 홀수인 노드만 골라 합산하는 문제다. 트리 순회 문제는 결국 현재 노드 처리와 왼쪽·오른쪽 결과 합치기의 반복이다. 이번 문제는 현재 노드 처리 부분만 '홀수 필터'로 바뀐 셈이다.
한눈에 보는 문제 정보
원본 파일:
C:\Users\cedis\OneDrive\문서\ANTIWORK\WEKK6~~~~~\data_structures_docker\Data-Structures\Binary_Tree\Q4_E_BT.c대상 함수:
sumOfOddNodes카테고리: 이진 트리
문제에서 요구한 것
메뉴와 출력 문자열을 보면 이 파일은 특정 자료구조 연산 하나를 직접 구현하도록 만든 실습 문제다. 입력 흐름은 아래처럼 정리할 수 있다.
- 1: Create a binary tree.
- 2: Find the sum of all odd numbers in the binary tree.
- 0: Quit
- The resulting binary tree is
- The sum of all odd numbers in the binary tree is: %d.
- Input an integer that you want to add to the binary tree. Any Alpha value will be treated as NULL.
핵심 구현 흐름
STEP 1
빈 노드면 0을 반환한다.
STEP 2
현재 노드 값이 홀수면 현재 합에 더한다.
STEP 3
왼쪽 합과 오른쪽 합을 재귀적으로 더해 전체 결과를 만든다.
핵심 코드
문제 파일 전체를 다 옮기기보다, 실제로 구현해야 했던 함수만 뽑아서 보면 로직이 더 선명하게 들어온다.
핵심 코드:
sumOfOddNodesint sumOfOddNodes(BTNode *node)
{
if (node == NULL)
{
return 0;
}
int leftsum = sumOfOddNodes(node->left);
int rightsum = sumOfOddNodes(node->right);
if(node->item %2 == 0)
{
return leftsum + rightsum;
}
else if(node->item %2 ==1)
{
return node->item + leftsum+rightsum;
}
}
구현할 때 체크할 점
- 짝수/홀수 판별은 음수까지 고려할지 문제 정의를 확인하면 좋다.
- 현재 노드 값을 더하는 타이밍과 하위 트리 합을 헷갈리지 말아야 한다.
마무리
이 문제는 거대한 알고리즘을 묻는 문제라기보다, 자료구조를 실제 포인터 연결과 순회 흐름으로 이해하고 있는지 확인하는 실습에 가깝다. 트리 순회 문제는 결국 현재 노드 처리와 왼쪽·오른쪽 결과 합치기의 반복이다. 이번 문제는 현재 노드 처리 부분만 '홀수 필터'로 바뀐 셈이다.
같은 카테고리의 다른 문제와 함께 보면, 연결 리스트에서는 재배선, 스택과 큐에서는 순서 제어, 트리에서는 재귀 순회라는 감각이 반복해서 나온다는 점도 같이 볼 수 있다.
'크래프톤 정글 > 정글에서 문제풀기' 카테고리의 다른 글
| 이진 트리 Q6. 기준값보다 작은 노드 출력하기 (0) | 2026.04.09 |
|---|---|
| 이진 트리 Q5. 좌우 반전하기 (0) | 2026.04.09 |
| 이진 트리 Q3. 자식이 하나인 노드 개수 세기 (0) | 2026.04.09 |
| 이진 트리 Q2. 트리의 높이 구하기 (0) | 2026.04.09 |
| 이진 트리 Q1. 두 트리가 같은 구조인지 확인하기 (0) | 2026.04.09 |