자료구조
[자료구조] 이진트리 연산
김천종
2022. 11. 11. 20:50
반응형
### getCount() ###
트리의 전체 노드 수를 반환하는 함수
1
2
3
4
5
6
7
8
9
10
11
|
int getCount() { return isEmpty() ? 0 : getCount(root); }
// 매개변수를 안넣어서 루트를 매개변수로 하는 함수 호출
int getCount(BinaryNode* Node) {
if (Node == NULL) return 0;
// 재귀적으로 함수를 호출하다가 NULL 까지 가면 0 반환
else
return 1 + getCount(Node->getLeft())
+ getCount(Node->getright());
// 반환되는 값에 1을 더함으로써 자기 자신의 개수를 추가함
}
|
cs |
### getHeight() ###
트리의 높이 ( 서브 트리의 높이 +1 ) 을 반환하는 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
int getHeight() { return isEmpty() ? 0 : getHeight(root); }
// 매개변수를 안넣어서 루트를 매개변수로 하는 함수 호출
int getHeight(BinaryNode* Node) {
if (Node == NULL) return 0;
// 재귀적으로 함수를 호출하다가 NULL까지 가면 0 반환
int h_left = getHeight(Node->getLeft());
// 왼쪽 서브트리의 높이 계산
int h_right = getHeight(Node->getright());
// 오른쪽 서브트리의 높이 계산
return (h_left > h_right) ? h_left + 1 : h_right + 1;
// 왼쪽 서브트리, 오른쪽 서브트리의 높이를 비교하며
// 1씩 증가시킴으로써 최종적으로 둘 중에 더 높은 서브트리의
// 높이를 반환한다.
}
|
cs |
### getLeafCount() ###
트리의 단말 노드 수를 반환하는 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
int getLeafCount() { return isEmpty() ? 0 : getLeafCount(root); }
// 매개변수를 안넣어서 루트를 매개변수로 하는 함수 호출
int getLeafCount(BinaryNode* Node) {
if (Node == NULL) return 0;
// 재귀적으로 함수를 호출하다가 NULL까지 가면 0 반환
// NULL을 가르키는 포인터를 가지고 있지만 단말노드는 아닌 상황에 쓰임
if (Node->isLeaf()) return 1;
// 재귀적으로 함수를 호출하다가 단말노드에서 1 반환
else {
return getLeafCount(Node->getLeft()) +
getLeafCount(Node->getright());
// 단말노드를 만나면 1을 반환하기 때문에 왼쪽 서브트리의
// 단말노드 개수 + 오른쪽 서브트리의 단말노드 개수를 하면
// 전체 단말노드 개수를 반환할 수 있다. ( 1(자기자신)을 더하지 않아도 )
}
}
|
cs |
반응형