Dvejetainis medis yra hierarchinė struktūra, kurioje kiekvienas mazgas turi daugiausia du vaikus, vadinamus left ir . Jis turi vieną ; mazgai be vaikų yra . Tai yra dviejų paieškos medžių, krūvų ir išraiškų medžių pagrindas.
Dvejetainis medis yra hierarchinė struktūra, kurioje kiekvienas mazgas turi daugiausia du vaikus, vadinamus left ir . Jis turi vieną ; mazgai be vaikų yra . Tai yra dviejų paieškos medžių, krūvų ir išraiškų medžių pagrindas.
right 1 depth 0 (root)
/ \
2 3 depth 1
/ \
4 5 depth 2 (leaves: 4,5,3)
class Node:
def __init__(self, val, left=None, right=None):
self.val, self.left, self.right = val, left, right
def inorder(n): # left, node, right -> 4 2 5 1 3
if n:
inorder(n.left); print(n.val); inorder(n.right)
def preorder(n): # node, left, right -> 1 2 4 5 3
if n:
print(n.val); preorder(n.left); preorder(n.right)
def postorder(n): # left, right, node -> 4 5 2 3 1
if n:
postorder(n.left); postorder(n.right); print(n.val)
Lygio tvarka (BFS) perėjimas naudoja eilę ir aplankо gylio po gylio.
| Perėjimas | Tvarka | Dažnas panaudojimas |
|---|---|---|
| Inorder | L, N, R | sutvarkyta dviejų paieškos medžio išvestis |
| Preorder | N, L, R | medžio kopija/serializacija |
| Postorder | L, R, N | medžio šalinimas, išraiškos įvertinimas |
| Level-order | pagal gylį | BFS, trumpiausias kelias medyje |
Kiekvienas perėjimas aplankо kiekvieną mazgą kartą → O(n) laikas, O(h) stekas, kur h yra medžio aukštis.
Dvejetainiai medžiai natūraliai modeliuoja hierarchinius duomenis (failų sistemos, analizės medžiai, sprendimų medžiai) ir yra pagrindas efektyvioms paieškos ir rūšiavimo struktūroms.
Išmanyti keturis perėjimus yra būtina — dauguma medžio interviu problemų yra vieno iš jų variacijos.