νΈλ¦¬(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 κ°μ λ¬Έμ ꡬ쑰λ νΈλ¦¬ ννλ‘ ννλμ΄, μμ κ°μ κ³μΈ΅ κ΄κ³λ₯Ό λνλ λλ€.
νΈλ¦¬(Tree)μ λν μ€λͺ μ€ λΉμΉΈμ λ€μ΄κ° λ¨μ΄λ 무μμΌκΉμ?
Guidelines
AI Tutor
Publish
Design
Upload
Notes
Favorites
Help
Code Editor
Execution Result