Binary tree'de preorder, inorder, postorder ve level-order gezinme nedir?
Cevap
| Gezinme | Sıra | Tipik kullanım |
|---|---|---|
| Preorder | Kök, sol, sağ | Ağacı kopyalama, serileştirme |
| Inorder | Sol, kök, sağ | BST'de elemanları sıralı verir |
| Postorder | Sol, sağ, kök | Silme, alt ağaç boyutu/yüksekliği hesaplama |
| Level-order | Seviye seviye (BFS) | En kısa derinlik, seviye bazlı işlemler |
class Node:
def __init__(self, val, left=None, right=None):
self.val, self.left, self.right = val, left, right
def inorder(root, out):
if root:
inorder(root.left, out)
out.append(root.val)
inorder(root.right, out)
return out
# Özyinelemesiz inorder (stack ile)
def inorder_iter(root):
out, stack, cur = [], [], root
while cur or stack:
while cur:
stack.append(cur)
cur = cur.left
cur = stack.pop()
out.append(cur.val)
cur = cur.right
return out
from collections import deque
def level_order(root):
if not root: return []
res, q = [], deque([root])
while q:
level = []
for _ in range(len(q)):
node = q.popleft()
level.append(node.val)
if node.left: q.append(node.left)
if node.right: q.append(node.right)
res.append(level)
return res- Zaman: hepsi
O(n). - Bellek: DFS türlerinde
O(h)(h = yükseklik; dengesiz ağaçtaO(n)), level-order'da en geniş seviye kadarO(w).
Örneğin 2 kökü, 1 sol ve 3 sağ çocuğu olan ağaçta: preorder 2,1,3, inorder 1,2,3, postorder 1,3,2.
İlgili Algoritmalar & Veri Yapıları soruları
- Binary search'ün zaman karmaşıklığı nedir ve neden?
- Two Sum: toplamı hedefe eşit olan iki elemanın indekslerini bulun.
- Bir parantez dizisinin geçerli olup olmadığını kontrol edin: "({[]})"
- Tek yönlü bağlı listeyi ters çevirin.
- BFS ve DFS arasındaki fark nedir? Hangisini ne zaman kullanırsınız?
- get ve put işlemleri O(1) olan bir LRU Cache tasarlayın.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.