Бинарное дерево — это структура данных, в которой каждый узел может иметь не более двух дочерних узлов: левый и правый. Такие деревья широко применяются в информатике, например, для сортировки и поиска информации.
В этом уроке мы создадим бинарное дерево на языке Python и напишем код для его вывода.
- Шаг 1. Определите двоичное дерево
- Шаг 2. Вставьте данные в двоичное дерево
- Шаг 3. Распечатайте двоичное дерево
- Шаг 4. Код для печати двоичного дерева
Шаг 1. Определите двоичное дерево
Во-первых, нам нужно создать структуру двоичного дерева. Здесь мы определим простой класс Node:
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
Этот класс представляет узел бинарного дерева. Каждый узел содержит некоторые данные и ссылки на своих левого и правого потомков.
Шаг 2. Вставьте данные в двоичное дерево
Чтобы вставить данные в дерево, мы определим функцию вставки:
def insert(root, data):
if root is None:
return Node(data)
else:
if data <= root.data:
root.left = insert(root.left, data)
else:
root.right = insert(root.right, data)
return root
Если дерево пустое (корень равен None), мы создаём новый узел с заданными данными и возвращаем его. В случае, когда дерево не пустое, мы рекурсивно вставляем данные либо в левое, либо в правое поддерево, в зависимости от значения данных.
Шаг 3. Распечатайте двоичное дерево
Есть несколько способов «распечатать» двоичное дерево. Здесь мы реализуем методы обхода по порядку, по предзаказу и после заказа:
- Обход по порядку: в этом методе обхода сначала посещается левое поддерево, затем корень, а затем правое поддерево.
def print_inorder(root):
if root:
print_inorder(root.left)
print(root.data, end=" ")
print_inorder(root.right)
- Обход по предварительному заказу: в этом методе обхода сначала посещается корневой узел, затем левое поддерево и, наконец, правое поддерево.
def print_preorder(root):
if root:
print(root.data, end=" ")
print_preorder(root.left)
print_preorder(root.right)
- Обход после заказа: в этом методе обхода корневой узел посещается последним. Сначала мы проходим левое поддерево, затем правое поддерево и, наконец, корневой узел.
Шаг 4. Код для печати двоичного дерева
Вот полный код:
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def insert(root, data):
if root is None:
return Node(data)
else:
if data <= root.data:
root.left = insert(root.left, data)
else:
root.right = insert(root.right, data)
return root
def print_inorder(root):
if root:
print_inorder(root.left)
print(root.data, end=" ")
print_inorder(root.right)
def print_preorder(root):
if root:
print(root.data, end=" ")
print_preorder(root.left)
print_preorder(root.right)
def print_postorder(root):
if root:
print_postorder(root.left)
print_postorder(root.right)
print(root.data, end=" ")
root = Node(50)
root = insert(root, 30)
root = insert(root, 20)
root = insert(root, 40)
root = insert(root, 70)
root = insert(root, 60)
root = insert(root, 80)
print("In-order traversal:")
print_inorder(root)
print("\nPre-order traversal:")
print_preorder(root)
print("\nPost-order traversal:")
print_postorder(root)
Когда вы запустите этот код, он сгенерирует двоичное дерево и выведет его, используя три различных метода обхода: прямой, обратный и симметричный.
