-
이진트리의 추가 연산자료구조 2022. 7. 15. 00:57728x90반응형
📌 이진트리의 추가 연산
💡 이진트리의 추가 연산
- 추가 연산의 종류
- 이진트리의 복사
- 이진트리가 동일한지 검사
- 이진트리의 노드 수 계산
- 이진트리의 단말 노드 수 계산
이진트리의 모든 노드들을 모두 한번씩 다 방문해야 한다.
- 트리의 모든 노드들을 방문할 필요성
- 이진트리의 순회 알고리즘 등을 응용한다.
💡 이진트리의 복사
- 문제 설명
- 입력 이진트리의 노드 구조와 동일한 새로운 이진트리를 생성하고 루트 노드의 주소 반환
- 후위순회 알고리즘을 사용한다.
💡 이진트리의 복사 알고리즘
struct node *copy(struct node *original){ # original 트리를 복사한 새로운 이진트리를 반환한다. struct node *temp; if(original != NULL){ temp = (struct node *) malloc(sizeof(struct node)); temp -> left_child = copy(original -> left_child); temp -> right_child = copy(original -> right_child); temp -> data = original -> data; return temp; } return NULL; }
💡 이진 트리의 동일성 검사
- 문제 설명
- 두 개의 이진 트리가 동일한 데이터와 동일한 구조를 갖는지 검사한다.
- 여기서 구조란 부모-자식, 형제 노드 등을 말한다.
- 전위 순회 알고리즘을 응용한다.
💡 이진 트리의 동일성 검사 알고리즘
int queal(struct node *first, struct node *second){ # first 와 second 트리가 다를 경우 False, 트리가 동일할 경우 True 를 반환한다. return ( (!first && !second) # 1 || (first && second && (first -> data == second -> first) # 2 && equal(first -> left_child, second -> left_child) && qeual(first -> right_child, second -> right_child))); # 3 }
- #1 : first 와 second가 둘 다 NULL 일 경우 True
- #2 : first 와 second가 둘 다 NULL 이 아니고, 각 노드의 데이터가 같다면?
- #3 : 노드의 왼쪽 자식, 오른쪽 자식이 같다면 재귀 호출
💡 이진트리의 노드 수 계산
- 접근 방법
- 루트 노드가 NULL dlaus 0 반환
- NULL 이 아니면
1 + 왼쪽 서브트리의 노드 수 + 오른쪽 서브트리의 노드 수
를 반환- 서브트리의 노드 수 는 순환 알고리즘으로 구할 수 있다.
int get_node_cnt(struct node *ptr){ int cnt = 0; if(ptr != NULL){ cnt = 1 + get_node_cnt(ptr -> left_child) + get_node_cnt(ptr -> right_child); } return cnt }
- 서브트리의 노드 수 는 순환 알고리즘으로 구할 수 있다.
💡 이진트리의 단말 노드 수 계산
- 접근 방법
- 루트 노드가 NULL 이면 0을 반환
- 단말 노드이면 1 반환
- 자식이 있을 경우,
왼쪽 서브트리의 단말 노드 수 + 오른쪽 서브트리의 단말 노드 수
를 반환한다.- 서브트리의 단말 노드 수는 순환알고리즘으로 구할 수 있다.
💡 이진트리의 단말 노드 수 계산 알고리즘
int get_leaf_cnt(struct node *ptr){ int cnt = 0; if (ptr != NULL){ if(ptr -> left_child == NULL && ptr -> right_child == NULL){ return 1; } } else{ cnt = get_leaf_cnt(ptr -> left_child) + get_leaf_cnt(ptr -> right_child); } return cnt; }
반응형'자료구조' 카테고리의 다른 글
히프의 개념과 응용 (0) 2022.07.17 스레드 이진트리 (0) 2022.07.17 이진트리의 순회 (0) 2022.07.12 트리와 이진트리의 개념 (0) 2022.07.12 이중 연결 리스트 (0) 2022.07.12 - 추가 연산의 종류