Home > Algorithm > 2024 > πŸ“¦[DS,Algorithm] 트리(Tree)

πŸ“¦[DS,Algorithm] 트리(Tree)
DataStructure Algorithm

1️⃣ 트리(Tree).

트리(Tree) λŠ” 계측적 ꡬ쑰λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 자료ꡬ쑰둜, λ…Έλ“œ(Node)와 에지(Edge)둜 κ΅¬μ„±λ©λ‹ˆλ‹€.

νŠΈλ¦¬λŠ” 사이클이 μ—†λŠ” μ—°κ²° κ·Έλž˜ν”„(Connected Graph)이며, 계측적 데이터 ν‘œν˜„μ— 맀우 μœ μš©ν•©λ‹ˆλ‹€.

νŠΈλ¦¬λŠ” λΆ€λͺ¨-μžμ‹ 관계λ₯Ό κ°€μ§€λ©°, λ°μ΄ν„°μ˜ 쑰직화와 검색, 계측적 데이터 ν‘œν˜„μ— μ‚¬μš©λ©λ‹ˆλ‹€.

1️⃣ 트리의 ꡬ성 μš”μ†Œ.

  1. λ…Έλ“œ(Node) : 트리의 κΈ°λ³Έ λ‹¨μœ„λ‘œ, 데이터λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

  2. 에지(Edge) : λ…Έλ“œμ™€ λ…Έλ“œλ₯Ό μ—°κ²°ν•˜λŠ” μ„ μœΌλ‘œ, λΆ€λͺ¨-μžμ‹ 관계λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  3. 루트(Root) : 트리의 μ΅œμƒμœ„ λ…Έλ“œλ‘œ, λΆ€λͺ¨ λ…Έλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

  4. λΆ€λͺ¨(Parent) : λ‹€λ₯Έ λ…Έλ“œλ₯Ό κ°€λ¦¬ν‚€λŠ” λ…Έλ“œμž…λ‹ˆλ‹€.

  5. μžμ‹(Child) : λΆ€λͺ¨ λ…Έλ“œμ— μ˜ν•΄ κ°€λ¦¬μΌœμ§€λŠ” λ…Έλ“œμž…λ‹ˆλ‹€.

  6. 잎(Leaf) : μžμ‹ λ…Έλ“œκ°€ μ—†λŠ” λ…Έλ“œμž…λ‹ˆλ‹€.

  7. λ‚΄λΆ€ λ…Έλ“œ(Internal Node) : μžμ‹ λ…Έλ“œκ°€ μžˆλŠ” λ…Έλ“œμž…λ‹ˆλ‹€.

  8. 레벨(Level) : 루트 λ…Έλ“œμ—μ„œ νŠΉμ • λ…Έλ“œκΉŒμ§€μ˜ 에지 수λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  9. 높이(Height) : 트리의 μ΅œλŒ€ λ ˆλ²¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

2️⃣ 트리의 νŠΉμ„±.

  • 계측적 ꡬ쑰 : νŠΈλ¦¬λŠ” 계측적 ꡬ쑰둜 데이터λ₯Ό μ‘°μ§ν™”ν•©λ‹ˆλ‹€.
  • 사이클 μ—†μŒ : νŠΈλ¦¬λŠ” 사이클이 μ—†λŠ” κ·Έλž˜ν”„μž…λ‹ˆλ‹€.
  • μ—°κ²°μ„± : λͺ¨λ“  λ…Έλ“œλŠ” ν•˜λ‚˜μ˜ μ—°κ²°λœ ꡬ성 μš”μ†Œλ‘œ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • ν•œ 개의 루트 λ…Έλ“œ : νŠΈλ¦¬λŠ” ν•˜λ‚˜μ˜ 루트 λ…Έλ“œλ₯Ό κ°€μ§€λ©°, 루트 λ…Έλ“œλŠ” 트리의 μ‹œμž‘μ μž…λ‹ˆλ‹€.

3️⃣ 트리의 μ’…λ₯˜.

  1. 이진 트리(Binary Tree) : 각 λ…Έλ“œκ°€ μ΅œλŒ€ 두 개의 μžμ‹ λ…Έλ“œλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” νŠΈλ¦¬μž…λ‹ˆλ‹€.

  2. 이진 탐색 트리(Binary Search Tree, BST) : 이진 트리의 μΌμ’…μœΌλ‘œ, μ™Όμͺ½ μžμ‹ λ…Έλ“œμ˜ 값이 λΆ€λͺ¨ λ…Έλ“œμ˜ 값보닀 μž‘κ³ , 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œμ˜ 값이 λΆ€λͺ¨ λ…Έλ“œμ˜ 값보닀 큰 νŠΉμ„±μ„ κ°€μ§‘λ‹ˆλ‹€.

  3. κ· ν˜• 이진 트리(Balanced Binary Tree) : AVL 트리, λ ˆλ“œ-λΈ”λž™ 트리 λ“±κ³Ό 같이 트리의 높이가 κ· ν˜•μ„ 이루도둝 μœ μ§€ν•˜λŠ” νŠΈλ¦¬μž…λ‹ˆλ‹€.

  4. B-트리(B-Tree) : λ°μ΄ν„°λ² μ΄μŠ€μ™€ 파일 μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©λ˜λŠ” 트리둜, μžμ‹ λ…Έλ“œμ˜ μˆ˜κ°€ μ •ν•΄μ§„ λ‹€μ§„ 트리(Multiway Tree)μž…λ‹ˆλ‹€.

  5. νž™(Heap) : μ™„μ „ 이진 트리의 μΌμ’…μœΌλ‘œ, λΆ€λͺ¨ λ…Έλ“œμ˜ 값이 μžμ‹ λ…Έλ“œμ˜ 값보닀 ν¬κ±°λ‚˜ μž‘μ€ νŠΉμ„±μ„ κ°€μ§‘λ‹ˆλ‹€.

  6. 트라이(Trie) : λ¬Έμžμ—΄ 검색을 μœ„ν•œ 트리 자료ꡬ쑰둜, 접두사 검색에 μœ μš©ν•©λ‹ˆλ‹€.

4️⃣ 트리의 μ£Όμš” μ—°μ‚°.

  1. μ‚½μž…(Insertion) : νŠΈλ¦¬μ— μƒˆλ‘œμš΄ λ…Έλ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  2. μ‚­μ œ(Deletion) : νŠΈλ¦¬μ—μ„œ λ…Έλ“œλ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.
  3. 탐색(Search) : νŠΈλ¦¬μ—μ„œ νŠΉμ • 값을 μ°ΎμŠ΅λ‹ˆλ‹€.
  4. 순회(Traversal) : 트리의 λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•©λ‹ˆλ‹€. μ „μœ„(Preorder), μ€‘μœ„(Inorder), ν›„μœ„(Postorder), 레벨 순회(Level Order) 방식이 μžˆμŠ΅λ‹ˆλ‹€.