π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[Coding Interview University] νΈλ¦¬ : μ΄λ‘ λ° κ΅¬ν λ³Έλ¬Έ
π©π» μ»΄ν¨ν° ꡬ쑰/Computer Science
[Coding Interview University] νΈλ¦¬ : μ΄λ‘ λ° κ΅¬ν
μ§μ§μνμΉ΄ 2023. 7. 11. 01:40728x90
λ°μν
<λ³Έ λΈλ‘κ·Έλ μ½λ©μΈν°λ·°λν λμ Gitκ³Ό μμ μ μ°Έκ³ ν΄μ 곡λΆνλ©° μμ±νμμ΅λλ€ :-)>
𫧠νΈλ¦¬
: νλμ λ£¨νΈ μ½λλ₯Ό κ°μ§λ€
: λ£¨νΈ λ Έλλ 0κ° μ΄μμ μμ λ Έλλ₯Ό κ°κ³ μλ€
: νΈλ¦¬μλ μ¬μ΄ν΄ μ‘΄μ¬ν μ μλ€
: λ Έλλ€μ νΉμ μμλ‘ λμ΄λ μλ μκ³ κ·Έλ΄ μ μμ μλ μλ€
: κ° λ Έλλ μ΄λ€ μλ£νμΌλ‘λ ννμ΄ κ°λ₯νλ€
λ Έλ(node) | νΈλ¦¬μ ꡬμ±μμμ ν΄λΉνλ A, B, C, D, E, Fμ κ°μ μμ |
κ°μ (edge) | λ Έλμ λ Έλλ₯Ό μ°κ²°νλ μ°κ²°μ |
λ£¨νΈ λ Έλ(root node) | νΈλ¦¬ ꡬ쑰μμ μ΅μμμ μ‘΄μ¬νλ Aμ κ°μ λ Έλ |
λ¨λ§ λ Έλ(terminal node, leaf node) | μλλ‘ λ λ€λ₯Έ λ Έλκ° μ°κ²°λμ΄ μμ§ μμ E, F, C, Dμ κ°μ λ Έλ |
λ΄λΆ λ Έλ(internal node),λΉ λ¨λ§ λ Έλ(non-terminal node) | λ¨λ§ λ Έλλ₯Ό μ μΈν λͺ¨λ λ Έλλ‘ A, Bμ κ°μ λ Έλ |
λ그리(degree,μ°¨μ) | κ° λ Έλμμ λ»μ΄λμ¨ κ°μ§μ μ A=3, B=2 |
νΈλ¦¬μ λ그리 | λ Έλλ€μ λ그리 μ€μμ κ°μ₯ λ§μ μ Aκ° 3κ°μ λ그리λ₯Ό κ°μ§κΈ° λλ¬Έμ νΈλ¦¬μ λ그리λ 3μ΄λ€. |
λΆλͺ¨ λ Έλ(parent node) | μ΄λ€ λ Έλμ μ°κ²°λ μ΄μ λ 벨μ λ Έλ E,Fμ λΆλͺ¨λ Έλλ B |
νμ λ Έλ(brother node) | λμΌν λΆλͺ¨λ₯Ό κ°λ λ Έλλ€ Eμ νμ λ Έλλ F |
λμ΄(height) | νΈλ¦¬μ μ΅κ³ λ 벨μ κ°λ¦¬μΌ 'λμ΄'λΌ νλ€ |
λ 벨(level), | κΉμ΄ νΈλ¦¬μμμ κ° μΈ΅λ³λ‘ μ«μλ‘ λ§€κ²¨μ μ΄λ₯Ό νΈλ¦¬μ 'λ 벨'μ΄λΌ νλ€ |
𫧠BFS λ ΈνΈ
- level order (BFS, νλ₯Ό μ¬μ©νμ¬)
- μκ° λ³΅μ‘λ: O(n)
- κ³΅κ° λ³΅μ‘λ: μ΅κ³ : O(1) μ΅μ : O(n/2)=O(n)
𫧠DFS λ ΈνΈ
- μκ° λ³΅μ‘λ: O(n)
- κ³΅κ° λ³΅μ‘λ: μ΅κ³ : O(log n) - νκ· μ μΌλ‘, νΈλ¦¬μ λμ΄μ΄λ€. μ΅μ : O(n)
- μ€μ(inorder) (DFS: μΌμͺ½, μμ , μ€λ₯Έμͺ½)
- νμ(postorder) (DFS: μΌμͺ½, μ€λ₯Έμͺ½, μμ )
- μ μ(preorder) (DFS: μμ , μΌμͺ½, μ€λ₯Έμͺ½)
π«§ λ Έλμ μ μΈ
#define N 10
typedef struct tagNode {
char data;
int degree;
struct tagNode child[N];
} Node;
𫧠νΈλ¦¬μ μ μΈ
typedef struct tagTree {
Node *root;
}Tree;
𫧠μμ±μ
Node* newNode(char data) {
Node* returnNode = (Node*)malloc(sizeof(Node));
returnNode->data = data;
returnNode->degree = 0;
returnNode->child = NULL;
return returnNode;
}
Tree* newTree() {
Tree* returnTree = (Tree*)malloc(sizeof(Tree));
returnTree->root = NULL;
return returnTree;
}
𫧠νΈλ¦¬
#include <stdio.h>
#include <stdlib.h>
typedef struct node //ꡬ쑰체 μ μ
{
int data;
struct node *left;
struct node *right;
}NODE;
/* newNode(): λ
Έλμ λ©λͺ¨λ¦¬ ν λΉνκ³ μ΄κΈ°ν*/
NODE* newNode(int data)
{
//λ
Έλμ λ©λͺ¨λ¦¬ ν λΉ
NODE* node = (NODE*)malloc(sizeof(NODE));
//λ°μ΄ν° λ£μ
node->data = data;
// μΌμͺ½, μ€λ₯Έμͺ½ λ
Έλλ₯Ό NULLλ‘ μ΄κΈ°ν
node->left = NULL;
node->right = NULL;
return(node);
}
int main()
{
/*λ£¨νΈ λ
Έλλ₯Ό λ§λ λ€*/
NODE *root = newNode(1);
/* λ£¨νΈ λ
Έλλ₯Ό λ§λ μν
1
/ \\
NULL NULL
*/
root->left = newNode(2);
root->right = newNode(3);
/* λ£¨νΈ λ
Έλ1μ μΌμͺ½, μ€λ₯Έμͺ½μ κ°κ° 2, 3μ΄λΌλ μμ λ
Έλ μΆκ°ν μν
1
/ \\
2 3
/ \\ / \\
NULL NULL NULL NULL
*/
root->left->left = newNode(4);
/* 2μ μΌμͺ½ μμμΌλ‘ 4λ₯Ό μΆκ°ν μν
1
/ \\
2 3
/ \\ / \\
4 NULL NULL NULL
/ \\
NULL NULL
*/
getchar();
return 0;
}
728x90
λ°μν
'π©βπ» μ»΄ν¨ν° ꡬ쑰 > Computer Science' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Comments