모든 사진 자료에 관한 출처는 아래 알튜비튜 - 튜터링에 있음을 밝힙니다.
https://github.com/Altu-Bitu/Notice
O(h)
(h=트리의 높이)DFS
,BFS
를 이용하여 탐색트리 | 그래프 | |
---|---|---|
간선의 수 | V-1개 | V-1개이상 |
특정 정점 사이 경로의 수 | 1개 | 1개 이상 |
방향 유무 | O | O or X |
사이클 유무 | X | O or X |
계층 관계 | O | X |
Tree
구조체
+ 포인터
: 실시간으로 트리를 만들어야할때 적합.
: 이미 트리 관계가 정의되어 있을때 적합
: 정점번호가 연속하지 않을때
적합. ex) 1,3,6,7,9
: 정점 번호가 연속
할때 적합
높이
에 비례한다!Full Binary
: leaf 노드들을 제외한 모든 노드들이 0개 혹은 2개의 children 을 가지고 있을 때.
Complete Binary
: 마지막 level 을 제외한 나머지 level 에 node 들이 가득 차있고, 마지막 level 에서 node 는 가장 왼쪽
부터 채워지는 형태
레벨 순회
전위 순회
: v -> l -> r
-> 3 6 5 4 7 1
중위 순회
: l -> v -> r
-> 5 6 4 3 1 7
후위 순회
: l -> r ->v
-> 5 4 6 1 7 3
int nodeCnt(int node){
int cnt=0;
for (int child : tree[node])
cnt+=nodeCnt(child); // 현재(node)의 자식노드의 노드 수를 모두 더함.
return cnt+1; //자식 노드의 노드 갯수 + 자신
int leafCnt(int node){
if (tree[node].empty()) //자식노드가 없다면 (leaf)
return 1;
int cnt =0;
for (int chlid : tree[node])
cnt+=leafCnt(child);
return cnt;
int treeHeight(int node){
int height = 0;
for (int child : tree[node]){
height = max(height, treeHeight(child)); //자식노드의 높이중 가장 큰 것.
return height+1; // 현재 노드까지의 높이는 자식노드의 높이+1
}
잘 보고있습니다!! 혹시 이미지들은 어떻게 만드시나요? 매번 깔끔하게 잘 만드셔서 궁금합니다