1. 배열로 이진 트리 만들기
#include <iostream>
#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;
typedef struct Node {
int left;
int right;
};
Node tree(1000001);
int main() {
fastio;
int parent , child;
int root = -1;
while (1) {
cin >> child;
if (root == -1) {
root = child;
continue;
}
parent = root;
while (1) {
if (트리의 오른쪽으로 가는 조건) {
if (tree(parent).right) {
parent = tree(parent).right;
}
else {
tree(parent).right = child;
break;
}
}
else { 트리의 왼쪽으로 가는 조건
if (tree(parent).left) {
parent = tree(parent).left;
}
else {
tree(parent).left = child;
break;
}
}
}
}
}
- 위의 이진 트리는 인덱스 값 = 데이터인 트리입니다. tree(5)는 값이 5인 노드를 의미합니다. 인덱스와 데이터를 구분하려면 노드 구조에 int 데이터를 추가하여 생성해야 합니다.
- 인덱스 = 데이터로 트리를 만들었기 때문에 모든 노드의 데이터 값은 양수입니다.
- 하위 노드에서 상위 노드에 액세스할 수 없습니다. 부모 노드는 좌우 자식 정보를 담고 있지만 자식 노드는 부모에 대한 정보를 저장하는 부분이 없습니다.
- 부모 노드에 대한 정보를 자식 노드에 저장하려면 int 부모 배열을 만들어 저장해야 합니다.
- children(left, right)의 값이 0이면 자식이 없음을 의미합니다.
- 자식이 들어갈 때마다 루트 노드부터 시작하여 노드가 들어가는 위치를 찾습니다.
