[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 58장 ~ 59장
글 작성자: _rian
58장. 이진트리 깊이우선탐색(DFS)
아래 그림과 같은 이진트리를 전위순회와 후위순회를 연습해보세요.

typedef struct node{ node* left; node* right; int curr; } //전위순회 void dfs(node* n){ dfs(n->left); cout << n->curr << " "; dfs(n->right); } //중위순회 void dfs(node* n){ cout << n->curr << " "; dfs(n->left); dfs(n->right); } //후위순회 void dfs(node* n){ dfs(n->left); dfs(n->right); cout << n->curr << " "; }
뭔가... 예전에 자주 했었는데 까먹었다.
얘도 구글 면접에서 나왔던 건데.. (숙연)...
사람이 발전이 없네 ㅇㅅㅠ
선생님 코드
#include <stdio.h> #include <vector> #include <algorithm> using namespace std; void D(int v){ if(v>7) return; else{ D(v*2); printf("%d ", v); D(v*2+1); } } int main(){ D(1); return 0; }
선생님은 굉장히 특이한 방법으로 푸셨다. 재미있던 것은 왼쪽 노드는 현재*2, 오른쪽 노드는 현재*2+1로 계산하여 푸신 것.
Key Point
left = curr*2
,right = curr*2 + 1

이거는... 진심으로 진짜 아예 감이 잡히지 않는다.
진심으로 모르겠다. 그래서 그냥 바로 선생님 강좌를 보았다.
#include <stdio.h> #include <vector> #include <algorithm> using namespace std; int n, ch[11]; void DFS(int L){ int i; if(L == n+1){ for(i =1 ; i<=n; i++){ if(ch[i] == 1) printf("%d ", i); } puts(""); }else{ ch[L] = 1; DFS(L+1); ch[L] = 0; DFS(L+1); } } int main(){ scanf("%d", &n); DFS(1); return 0; }
왕신기.. 진짜진짜 신기하게 푸셨다.
Key Point
- Ch배열 : 이 배열은 출력 하니 마니를 하고 있다. 만약 왼->왼->왼 의 순서로 방문하고 있으면 ch배열은 [1, 1, 1]이 된다. 그러면 1인 인덱스를 출력하는 것이다.
- Level : 저기서 L은 레벨을 의미한다. 3이 입력이 되면 레벨은 3이고, 4가 입력이 되면 레벨은 4까지를 둘러(?)본다.
'알고리즘 Algorithm ' 카테고리의 다른 글
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 70장 ~ (0) | 2020.07.03 |
---|---|
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 62장 ~ 63장 (0) | 2020.06.27 |
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 49장 ~ 51장 (0) | 2020.06.20 |
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 31장 ~ 35장 (0) | 2020.06.17 |
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 26장 ~ 30장 (0) | 2020.06.17 |
댓글
이 글 공유하기
다른 글
-
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 70장 ~
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 70장 ~
2020.07.0370장. 그래프 최단거리 (BFS) 다음 그래프에서 1번 정점에서 각 정점으로 가는 최소 이동 간선수를 출력하세요. 입력 첫째 줄에는 정점의 수 N(1 N >> M; for(int i=0; i> from >> to; map[from].push_back(to); } for(int i=2; i -
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 62장 ~ 63장
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 62장 ~ 63장
2020.06.2763장. 인접 행렬(가중치 방향 그래프) 아래 그림과 같은 그래프 정보를 인접행렬로 표현해보세요 입력 첫째줄에는 정점의 수 N(1 -
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 49장 ~ 51장
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 49장 ~ 51장
2020.06.20오늘도~~!!!! Keep Going! 두려워하는 것을 매일 차근차근 한다면 두려움 보다는 설레임이 더 커진다! 49장. 블록의 최댓값 현수에게 정면에서 본 단면과 오른쪽 측면에서 본 단면을 주고 최대 블록 개수를 사용하여 정면과 오른쪽 측면에서 본 모습으로 블록을 쌓으라고 했다. 현수가 블록을 쌓는데 사용해야 할 최대 개수를 출력하는 프로그램을 작성하세요. 입력 첫 줄에 블록의 크기 N(3 N; for(int i=0; i> input; for(int j=0; j input; for(int j = N-1; j >= 0; j--){ b[i][j] = input; } } for(int i=0; i territory[i][j]; } } cin >> h >> w; for(int i=0; i < H - h + 1… -
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 31장 ~ 35장
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 31장 ~ 35장
2020.06.17오늘도 따라하며 배우는 인프런강좌!!! 존버는 승리한다 오늘 과제는 약간 이런 느낌 ㅋㅋㅋ 31장. 탄화수소 질량 탄소(C)와 수소(H)로만 이루어진 화합물을 탄화수소라고 한다. 탄소 한개의 질량은 12g, 수소 하나의 질량은 1g이다. 탄화수소식이 주어지면 해당 화합물의 질량을 구하는 프로그램을 작성하시오. 입력 첫 줄에 탄화수소식이 주어진다. 식이 형태는 CaHb의 형태이며 (1 input; int i = 1; if(input[i] == 'H'){ numOfC = 1; if(input[i+1] == '\0'){ numOfH = 1; }else{ num = ""; for(int j=i+1; input[j] != '\0'; j++){ num += input[j]; } numOfH = stoi(num); …
댓글을 사용할 수 없습니다.