[πŸ“—cμ–Έμ–΄ μ‰½κ²Œ ν’€μ–΄μ“΄ 자료ꡬ쑰8] 트리

μ•ˆμ§€μˆ˜Β·2023λ…„ 2μ›” 12일
0

πŸ‘‘ 트리의 κ°œλ…

βœ” 트리의 μš©μ–΄λ“€

  • λ…Έλ“œ, λ£¨νŠΈλ…Έλ“œ, μ„œλΈŒνŠΈλ¦¬, κ°„μ„ , 포리슀트
  • μ‘°μƒλ…Έλ“œ: λ£¨νŠΈλ…Έλ“œμ—μ„œ μž„μ˜μ˜ λ…Έλ“œκΉŒμ§€μ˜ 경둜λ₯Ό 이루고 μžˆλŠ” λ…Έλ“œλ“€
  • 후손 λ…Έλ“œ: μž„μ˜μ˜ λ…Έλ“œ ν•˜μœ„μ— μ—°κ²°λœ λͺ¨λ“  λ…Έλ“œλ“€
  • λ‹¨λ§λ…Έλ“œ: μžμ‹ λ…Έλ“œκ°€ μ—†λŠ” λ…Έλ“œ (<-> λΉ„λ‹¨λ§λ…Έλ“œ)
  • 차수: λ…Έλ“œκ°€ 가지고 μžˆλŠ” μžμ‹λ…Έλ“œμ˜ 수
  • 레벨: 각 측의 번호 (루트 레벨: 1)
  • 높이: νŠΈλ¦¬κ°€ 가지고 μžˆλŠ” μ΅œλŒ€ 레벨

--> μ—¬κΈ°μ„œλŠ” μ΄μ§„νŠΈλ¦¬λ₯Ό μžμ„Έν•˜κ²Œ λ‹€λ£° κ²ƒμž„!

πŸ‘‘ 이진 트리 μ†Œκ°œ

: λͺ¨λ“  λ…Έλ“œκ°€ 2개의 μ„œλΈŒνŠΈλ¦¬λ₯Ό 가지고 μžˆλŠ” 트리 (λͺ¨λ“  λ…Έλ“œμ˜ μ°¨μˆ˜κ°€ 2 μ΄ν•˜)

  • n-1개의 κ°„μ„ 
  • 높이가 h인 μ΄μ§„νŠΈλ¦¬μ˜ 경우, μ΅œμ†Œ h개의 λ…Έλ“œ μ΅œλŒ€ 2h-1개의 λ…Έλ“œ

βœ” μ΄μ§„νŠΈλ¦¬μ˜ λΆ„λ₯˜

  • 포화 μ΄μ§„νŠΈλ¦¬: 각 λ ˆλ²¨μ— λ…Έλ“œκ°€ 꽉 μ°¨μžˆλŠ” μ΄μ§„νŠΈλ¦¬
  • μ™„μ „ μ΄μ§„νŠΈλ¦¬: λ§ˆμ§€λ§‰ 이전 λ ˆλ²¨κΉŒμ§€λŠ” 꽉 μ°¨ 있고, λ§ˆμ§€λ§‰ λ ˆλ²¨μ€ μ™Όμͺ½λΆ€ν„° μˆœμ„œλŒ€λ‘œ μ°¨ μžˆλŠ” 트리

πŸ‘‘ 이진 트리의 ν‘œν˜„

  1. λ°°μ—΄: 인덱슀 1λΆ€ν„° μ‚¬μš©
  2. 포인터
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

typedef struct TreeNode {
	int data;
	struct TreeNode  *left, *right;
}TreeNode;

int main(void)
{
	TreeNode *n1, *n2, *n3;
	n1 = (TreeNode*)malloc(sizeof(TreeNode));
	n2 = (TreeNode*)malloc(sizeof(TreeNode));
	n3 = (TreeNode*)malloc(sizeof(TreeNode));
	n1->data = 10;
	n1->left = n2;
	n1->right = n3;
	n2->data;
	n2->left = NULL;
	n2->right = NULL;
	n3->data = 30;
	n3->left = NULL;
	n3->right = NULL;
	free(n1); free(n2); free(n3);
	return 0;
}

πŸ‘‘ 이진 트리의 순회

: λ£¨νŠΈλ…Έλ“œ λ°©λ¬Έ μˆœμ„œμ— 따라 (μŠ€νƒ μ‚¬μš©)
1. μ „μœ„ 순회: 루트λ₯Ό 제일 λ¨Όμ € (루-μ™Ό-였)
2. μ€‘μœ„ 순회: μ™Ό-루-였
3. ν›„μœ„ 순회: μ™Ό-였-루
--> μˆœν™˜μ΄λ‚˜ 반볡 (μŠ€νƒ ν•„μš”)을 톡해 κ΅¬ν˜„ κ°€λŠ₯

πŸ‘‘ 레벨 순회

: 각 λ…Έλ“œλ₯Ό 레벨 순으둜 검사 (큐 μ‚¬μš©)

profile
μ§€μˆ˜μ˜ μ·¨μ€€, 개발일기

0개의 λŒ“κΈ€