반응형
insert(number X, node N)
if X가 노드 N에 있는 숫자보다 작다면
if N의 왼쪽 자식이 없다면
X를 포함하는 새 노드를 만든 뒤, N의 왼쪽 자식으로 만든다.
else
insert(X, N의 왼쪽 자식)
else X가 노드 N에 있는 숫자보다 크다면
if N의 오른쪽 자식이 없다면
X를 포함하는 새 노드를 만든 뒤, N의 오른쪽 자식으로 만들기
else
insert(X, N의 오른쪽 자식)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <iostream> #include <cstdio> using namespace std; typedef struct _TREE_ { int idx; int left; int right; int parent; }TREE; TREE tree[200002]; int main() { int n, val, root; scanf("%d", &n); int tmp; int cnt = 0; for (int i = 1; i <= n; i++) { scanf("%d", &val); if (i == 1) { tree[val].idx = i; root = val; tmp = root; } else { tree[val].idx = i; root = tmp; // 최고 루트 노드 while(1) { cnt++; if(val < root) { if (tree[root].left == 0) { tree[val].parent = root; tree[root].left = val; break; } else root = tree[root].left; } else if (val > root) { if (tree[root].right == 0) { tree[val].parent = root; tree[root].right = val; break; } else root = tree[root].right; } } } printf("%d\n", cnt); } //for (int i = 0; i <= n; i++) // cout << "val :: " << i << " idx ::" << tree[i].idx << " parent :: " << tree[i].parent << " left :: " << tree[i].left << " right :: " << tree[i].right << endl; return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 자료구조' 카테고리의 다른 글
Segment Tree with Lazy Propagation (0) | 2017.03.13 |
---|---|
세그먼트 트리(Segment Tree) (35) | 2017.03.08 |
맵(Map) STL 사용 방법 (0) | 2017.02.20 |
튜플(Tuple) STL 사용 방법 (2) | 2017.02.14 |
페어(Pair) STL 사용 방법 (0) | 2017.02.14 |