Binární dřevo - je to hierarchická datová struktura složená z uzlů Spojených větvemi. Jedinečnost této struktury je přítomnost více než dvou potomků v každém uzlu. Binární strom je jednou z hlavních součástí algoritmů a programování.
Níže je uveden příklad kódu v Pythonu, který ukazuje, jak odvodit binární strom:
class Node:def __init__(self, value):self.value = valueself.left = Noneself.right = Nonedef print_tree(node):if node is None:returnprint_tree(node.left)print(node.value)print_tree(node.right)# Создание примера бинарного дереваroot = Node(1)root.left = Node(2)root.right = Node(3)root.left.left = Node(4)root.left.right = Node(5)print_tree(root)
4
2
5
1
3
Struktura binární dřevo
Každý uzel binárního stromu obsahuje dvě hlavní pole:
- Hodnota: ukládá informace, které jsou spojeny s tímto uzlem.
- Odkaz na podřízený uzel: určuje, na který uzel budou odkazovat levé a pravé podřízené uzly daného uzlu.
Struktura binárního stromu vám umožňuje efektivně ukládat a operovat s daty. Nachází široké uplatnění v různých oblastech, včetně vyhledávacích algoritmů, třídění, komprese dat a dalších.
Vytváření a práce s binárním stromem může vyžadovat speciální algoritmy a techniky obcházení, jako je Přímé, Symetrické a zpětné obcházení. Umožňují přístup k uzlům stromu v určitém pořadí a provádění nezbytných operací.
Pochopení struktury binárního stromu je důležité pro vývojáře, aby jej mohli efektivně využívat ve svých projektech a řešit různé úkoly související se zpracováním a ukládáním dat.
Implementace třídy Binary Tree v Pythonu
Níže je implementace třídy Binary Tree:
class Node:def __init__(self, value):self.value = valueself.left = Noneself.right = Noneclass BinaryTree:def __init__(self):self.root = Nonedef add(self, value):if self.root is None:self.root = Node(value)else:self._add(self.root, value)def _add(self, node, value):if value < node.value:if node.left is None:node.left = Node(value)else:self._add(node.left, value)else:if node.right is None:node.right = Node(value)else:self._add(node.right, value)def remove(self, value):if self.root is None:return Falseelse:self.root = self._remove(self.root, value)return Truedef _remove(self, node, value):if node is None:return nodeif value < node.value:node.left = self._remove(node.left, value)elif value >node.value:node.right = self._remove(node.right, value)else:if node.left is None:return node.rightelif node.right is None:return node.leftelse:temp = self._get_min(node.right)node.value = temp.valuenode.right = self._remove(node.right, temp.value)return nodedef _get_min(self, node):current = nodewhile current.left is not None:current = current.leftreturn currentdef find(self, value):if self.root is None:return Falseelse:return self._find(self.root, value)def _find(self, node, value):if node is None:return Falseif value == node.value:return Trueelif value < node.value:return self._find(node.left, value)else:return self._find(node.right, value)def display(self):if self.root is None:print("Дерево пусто")else:self._display(self.root)def _display(self, node):if node is not None:self._display(node.left)print(node.value, end=" ")self._display(node.right)
Můžete vytvořit instanci třídy Binary Tree a použít její metody k práci s binárním stromem.
- Funkce print_tree (node, level) :
- Pokud je uzel nulový, vrátíme se
- Voláme funkci print_tree pro levý poddruh s úrovní zvětšenou o 1
- Voláme funkci print_tree pro pravý poddruh s úrovní zvětšenou o 1
Příklad implementace v jazyce Python:
def print_tree(node, level):if node is None:returnprint(' ' * level, node.value)print_tree(node.left, level + 1)print_tree(node.right, level + 1)# Пример использования:# tree - корневой узел бинарного дереваprint_tree(tree, 0)Při spuštění tohoto kódu bude binární strom zobrazen na obrazovce s odsazeními zobrazujícími jeho strukturu a hierarchii. Tento algoritmus může být užitečný pro ladění a pochopení fungování různých operací binárního stromu.
class Node:def __init__(self, value):self.value = valueself.left = Noneself.right = Nonedef print_tree(node, level=0):if node is not None:print_tree(node.right, level+1)print(' ' * level + str(node.value))print_tree(node.left, level+1)# Создаем бинарное деревоroot = Node(1)root.left = Node(2)root.right = Node(3)root.left.left = Node(4)root.left.right = Node(5)root.right.left = Node(6)root.right.right = Node(7)print_tree(root)V tomto příkladu je vytvořena třída Node představující uzel binárního stromu. Uzel obsahuje hodnotu (value) a odkazy na levicové a pravicové potomky.
7361524