Guidelines

트리(Tree)λž€ λ¬΄μ—‡μΌκΉŒμš”?

트리(Tree)λŠ” 계측적 데이터 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜λŠ” μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€.

νŠΈλ¦¬λŠ” 루트(root)라고 λΆˆλ¦¬λŠ” ν•˜λ‚˜μ˜ λ…Έλ“œμ—μ„œ μ‹œμž‘ν•˜μ—¬ μ—¬λŸ¬ μžμ‹ λ…Έλ“œλ‘œ ν™•μž₯되며, 각 λ…Έλ“œλŠ” λ‹€μ‹œ μžμ‹ λ…Έλ“œλ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

νŠΈλ¦¬λŠ” 파일 μ‹œμŠ€ν…œ, 검색 μ•Œκ³ λ¦¬μ¦˜ λ“± λ‹€μ–‘ν•œ 뢄야에 ν™œμš©λ©λ‹ˆλ‹€.


트리의 κΈ°λ³Έ κ°œλ…κ³Ό μ£Όμš” μš©μ–΄

트리의 κΈ°λ³Έ κ°œλ…

νŠΈλ¦¬λŠ” λ…Έλ“œ(Node)와 κ°„μ„ (Edge)으둜 κ΅¬μ„±λ©λ‹ˆλ‹€.

λ…Έλ“œλŠ” 데이터λ₯Ό μ €μž₯ν•˜λŠ” λ‹¨μœ„μ΄λ©°, 간선은 λ…Έλ“œ κ°„μ˜ 관계λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

νŠΈλ¦¬μ—μ„œ μ΅œμƒμœ„μ— μžˆλŠ” λ…Έλ“œλ₯Ό 루트(Root)라고 λΆ€λ₯΄λ©°, 이 λ£¨νŠΈμ—μ„œ μ‹œμž‘ν•΄ μ—¬λŸ¬ μžμ‹ λ…Έλ“œλ‘œ λ»—μ–΄ λ‚˜κ°‘λ‹ˆλ‹€.


μ£Όμš” μš©μ–΄

  • 루트 λ…Έλ“œ(Root Node): 트리의 μ΅œμƒμœ„ λ…Έλ“œμž…λ‹ˆλ‹€.

  • μžμ‹ λ…Έλ“œ(Child Node): 루트 λ…Έλ“œμ—μ„œ μ—°κ²°λœ ν•˜μœ„ λ…Έλ“œμž…λ‹ˆλ‹€.

  • λΆ€λͺ¨ λ…Έλ“œ(Parent Node): μžμ‹ λ…Έλ“œλ₯Ό 가진 λ…Έλ“œμž…λ‹ˆλ‹€.

  • 리프 λ…Έλ“œ(Leaf Node): μžμ‹ λ…Έλ“œκ°€ μ—†λŠ” λ…Έλ“œλ‘œ, 트리의 끝에 μœ„μΉ˜ν•©λ‹ˆλ‹€.

  • μ„œλΈŒνŠΈλ¦¬(Subtree): 트리 λ‚΄μ˜ ν•˜λ‚˜μ˜ λ…Έλ“œλ₯Ό 루트둜 ν•˜λŠ” λΆ€λΆ„ νŠΈλ¦¬μž…λ‹ˆλ‹€.

  • 깊이(Depth): 루트 λ…Έλ“œμ—μ„œ νŠΉμ • λ…Έλ“œκΉŒμ§€μ˜ 경둜 κΈΈμ΄μž…λ‹ˆλ‹€.

  • 높이(Height): 트리의 λ£¨νŠΈμ—μ„œ κ°€μž₯ κΉŠμ€ 리프 λ…Έλ“œκΉŒμ§€μ˜ κΈΈμ΄μž…λ‹ˆλ‹€.


νŒŒμ΄μ¬μ—μ„œμ˜ 트리 κ΅¬ν˜„ 간단 예제

트리λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ—¬λŸ¬ 가지 방법이 μžˆμ§€λ§Œ, 이번 μˆ˜μ—…μ—μ„œλŠ” κ°€μž₯ κ°„λ‹¨ν•œ ꡬ쑰인 이진 트리(Binary Tree)λ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

이진 νŠΈλ¦¬λŠ” 각 λ…Έλ“œκ°€ μ΅œλŒ€ 2개의 μžμ‹ λ…Έλ“œλ₯Ό κ°–λŠ” νŠΈλ¦¬μž…λ‹ˆλ‹€.

μ•„λž˜ 이진 νŠΈλ¦¬λŠ” 루트 λ…Έλ“œκ°€ 10이고, μ™Όμͺ½ μžμ‹ λ…Έλ“œλŠ” 5, 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œλŠ” 15인 κ΅¬μ‘°μž…λ‹ˆλ‹€.

이진 트리 ꡬ쑰
10 / \ 5 15

μ•„λž˜ μ½”λ“œλŠ” 루트 λ…Έλ“œλ³΄λ‹€ μž‘μ€ λ°μ΄ν„°λŠ” μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬μ—, κ°™κ±°λ‚˜ 큰 λ°μ΄ν„°λŠ” 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬μ— μ‚½μž…ν•˜λŠ” 이진 트리λ₯Ό κ΅¬ν˜„ν•œ μ½”λ“œμž…λ‹ˆλ‹€.

κ°„λ‹¨ν•œ 이진 트리 κ΅¬ν˜„ 예제
class Node: def __init__(self, data): self.data = data self.left = None self.right = None class BinaryTree: def __init__(self, root_data): # 루트 λ…Έλ“œλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. self.root = Node(root_data) def insert(self, current_node, data): # λ£¨νŠΈλ³΄λ‹€ μž‘μ€ λ°μ΄ν„°λŠ” μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬μ— μ‚½μž… if data < current_node.data: if current_node.left is None: current_node.left = Node(data) print(f"{data}κ°€ {current_node.data}의 μ™Όμͺ½μ— μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.") else: self.insert(current_node.left, data) # λ£¨νŠΈμ™€ κ°™κ±°λ‚˜ 큰 λ°μ΄ν„°λŠ” 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬μ— μ‚½μž… else: if current_node.right is None: current_node.right = Node(data) print(f"{data}κ°€ {current_node.data}의 였λ₯Έμͺ½μ— μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.") else: self.insert(current_node.right, data) def display(self, node, indent="", position="Root"): # ν˜„μž¬ λ…Έλ“œλ₯Ό 좜λ ₯ if node is not None: print(indent + position + ": " + str(node.data)) # μ™Όμͺ½ μžμ‹ λ…Έλ“œλ₯Ό λ¨Όμ € 좜λ ₯ (μ•„λž˜μͺ½μ— μœ„μΉ˜) self.display(node.left, indent + " ", "L") # 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œλ₯Ό 좜λ ₯ (μ•„λž˜μͺ½μ— μœ„μΉ˜) self.display(node.right, indent + " ", "R") # 이진 트리 μ‚¬μš© μ˜ˆμ‹œ bt = BinaryTree(10) # 루트 λ…Έλ“œλ‘œ 10을 μ„€μ • bt.insert(bt.root, 5) # 5λŠ” 10보닀 μž‘μœΌλ―€λ‘œ μ™Όμͺ½μ— μΆ”κ°€ bt.insert(bt.root, 15) # 15λŠ” 10보닀 ν¬λ―€λ‘œ 였λ₯Έμͺ½μ— μΆ”κ°€ bt.insert(bt.root, 3) # 3은 5보닀 μž‘μœΌλ―€λ‘œ 5의 μ™Όμͺ½μ— μΆ”κ°€ bt.insert(bt.root, 7) # 7은 5보닀 ν¬λ―€λ‘œ 5의 였λ₯Έμͺ½μ— μΆ”κ°€ bt.insert(bt.root, 13) # 13은 15보닀 μž‘μœΌλ―€λ‘œ 15의 μ™Όμͺ½μ— μΆ”κ°€ bt.insert(bt.root, 17) # 17은 15보닀 ν¬λ―€λ‘œ 15의 였λ₯Έμͺ½μ— μΆ”κ°€ bt.display(bt.root)

μ½”λ“œ μ‹€ν–‰ κ²°κ³Ό

μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ μ•„λž˜μ™€ 같이 이진 νŠΈλ¦¬κ°€ μƒμ„±λ˜κ³ , 각 λ…Έλ“œμ˜ μœ„μΉ˜μ— 데이터가 μΆ”κ°€λ©λ‹ˆλ‹€.

좜λ ₯ κ²°κ³Ό
Root: 10 L: 5 L: 3 R: 7 R: 15 L: 13 R: 17

μ΄λ ‡κ²Œ 이진 νŠΈλ¦¬λŠ” 루트 λ…Έλ“œλ₯Ό μ‹œμž‘μœΌλ‘œ μ™Όμͺ½κ³Ό 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬λ‘œ λ‚˜λ‰˜μ–΄ 데이터λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.


트리 ꡬ쑰 ν™œμš© 사둀

νŠΈλ¦¬λŠ” λ‹€μ–‘ν•œ μ‹€μƒν™œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

  • 파일 μ‹œμŠ€ν…œ: 운영체제의 파일 κ΅¬μ‘°λŠ” 디렉터리와 파일이 λ…Έλ“œλ‘œ, 디렉터리 κ°„μ˜ 포함 관계가 κ°„μ„ μœΌλ‘œ ν‘œν˜„λ©λ‹ˆλ‹€.

  • 검색 μ•Œκ³ λ¦¬μ¦˜: 이진 검색 트리(Binary Search Tree)λ₯Ό μ‚¬μš©ν•˜λ©΄ 데이터 검색 속도λ₯Ό 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • λ¬Έμ„œ ꡬ쑰: HTMLμ΄λ‚˜ XML 같은 λ¬Έμ„œ κ΅¬μ‘°λŠ” 트리 ν˜•νƒœλ‘œ ν‘œν˜„λ˜μ–΄, μš”μ†Œ κ°„μ˜ 계측 관계λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

Mission
0 / 1

트리(Tree)에 λŒ€ν•œ μ„€λͺ… 쀑 λΉˆμΉΈμ— λ“€μ–΄κ°ˆ λ‹¨μ–΄λŠ” λ¬΄μ—‡μΌκΉŒμš”?

νŠΈλ¦¬μ—μ„œ μ΅œμƒμœ„μ— μžˆλŠ” λ…Έλ“œλ₯Ό [______]라고 λΆ€λ¦…λ‹ˆλ‹€.
μžμ‹ λ…Έλ“œ
리프 λ…Έλ“œ
μ„œλΈŒνŠΈλ¦¬
루트 λ…Έλ“œ

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result