Под термином «дерево и график» подразумевается сравнение двух фундаментальных структур данных, используемых в информатике. Дерево — это иерархическая структура данных, состоящая из узлов, соединенных ребрами, с одним корневым узлом и ветвящейся структурой. С другой стороны, граф — это нелинейная структура данных, состоящая из узлов и ребер, которые могут иметь произвольные связи.
Вот несколько методов с примерами кода для понимания и работы с деревьями и графами:
-
Методы обхода дерева:
-
Обход предварительного заказа:
def preorder(node): if node is not None: print(node.value) preorder(node.left) preorder(node.right) -
Обход по порядку:
def inorder(node): if node is not None: inorder(node.left) print(node.value) inorder(node.right) -
Обход после заказа:
def postorder(node): if node is not None: postorder(node.left) postorder(node.right) print(node.value)
-
-
Методы обхода графика:
-
Поиск в глубину (DFS):
def dfs(graph, start, visited=None): if visited is None: visited = set() visited.add(start) print(start) for neighbor in graph[start] - visited: dfs(graph, neighbor, visited) -
Поиск в ширину (BFS):
from collections import deque def bfs(graph, start): visited = set() queue = deque([start]) visited.add(start) while queue: node = queue.popleft() print(node) for neighbor in graph[node] - visited: visited.add(neighbor) queue.append(neighbor)
-
-
Операции с деревом:
-
Вставка:
class TreeNode: def __init__(self, value): self.value = value self.left = None self.right = None def insert(root, value): if root is None: return TreeNode(value) if value < root.value: root.left = insert(root.left, value) else: root.right = insert(root.right, value) return root -
Удаление:
def delete(root, value): if root is None: return root if value < root.value: root.left = delete(root.left, value) elif value > root.value: root.right = delete(root.right, value) else: if root.left is None: return root.right elif root.right is None: return root.left root.value = find_min(root.right) root.right = delete(root.right, root.value) return root def find_min(node): while node.left is not None: node = node.left return node.value
-
-
Операции с графиками:
-
Добавление преимущества:
def add_edge(graph, u, v): graph[u].add(v) graph[v].add(u) -
Удаление края:
def remove_edge(graph, u, v): graph[u].remove(v) graph[v].remove(u)
-
Это всего лишь несколько примеров методов и операций для деревьев и графов. Существует множество других алгоритмов и методов, которые можно применять в зависимости от конкретного варианта использования.