Kalıp #16
Ağaç DFS
TemelHer alt ağacın ebeveynine ne döndürdüğünü tanımla.
Ne zaman kullanılır
Sol ve sağ sonuçları birleştiren ikili ağaç cevapları: derinlik, geçerlilik, LCA, yol toplamları.
Tanıma ipuçları
- Maks derinlik / dengeli ağaç
- BST doğrula / LCA
- Yol toplamı varyantları
Yaygın tuzaklar
- Global cevap güncellemelerini dönüş değerleriyle dikkatsiz karıştırmak
- Yanlış sınırlarla BST doğrulama
- Null çocukları temel durum olarak ele almama
90 saniyelik tanıma egzersizi
Hangisi en iyi uyuyor?
- Maks derinlik / dengeli ağaç
- BST doğrula / LCA
- Yol toplamı varyantları
Interactive
Zihinsel model
Değişmezin tam adım adım anlatımı. Duraklat, noktalara tıkla veya ← → kullan. Her adımı kendi cümlelerinle anlatmayı hedefle.
post-order: children first, then me
Tree DFS walks structure, not a flat list. Root 3, left 9, right subtree 20 → 15, 7.
Nasıl düşünülür
Ebeveynin ihtiyacı olanı döndüren f(node) yaz (yükseklik, is-BST, min/max, düğümden geçen en iyi yol). Önce sol ve sağı çöz, sonra birleştir. Bazen global en iyiyi de güncelle.
Etkileşimli model gerçek ağaç çizimi kullanır (kenarlar + düğümler); değerler ve rozetler yapı boyunca yukarı akar.
Şablon şekilleri
| Şekil | Temel hamle | Notlar |
|---|---|---|
| Yükseklik döndür | 1+max(L,R) | Derinlik, denge |
| Çok alan döndür | bayrak struct | BST / çap |
| Sınır geç | low < val < high | BST doğrula |
Karmaşıklık temeli
O(n) zaman her düğümü bir kez; alan özyineleme yığını O(h).
Şablondan probleme
- f(node) dönüş tipini bir cümlede belirt.
- null için temel durum.
- Sol/sağ özyinele; birleştir; isteğe bağlı global güncelle.
- Ebeveynin istediği değeri döndür.
Şablon
TypeScript, Python ve C#’te aynı iskelet. Değişmezi uyarla; yapıyı koru.
/** Tree DFS template: max depth. */
export class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val = 0, left: TreeNode | null = null, right: TreeNode | null = null) {
this.val = val; this.left = left; this.right = right;
}
}
export function maxDepth(root: TreeNode | null): number {
if (!root) return 0;
return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
}
/** Tree DFS template: max depth. */
export class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val = 0, left: TreeNode | null = null, right: TreeNode | null = null) {
this.val = val; this.left = left; this.right = right;
}
}
export function maxDepth(root: TreeNode | null): number {
if (!root) return 0;
return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
}
- 1#98 Validate Binary Search TreeRehbermedium
- 2#100 Same TreeRehbereasy
- 3#104 Maximum Depth of Binary TreeRehbereasy
- 4#110 Balanced Binary TreeRehbereasy
- 5#124 Binary Tree Maximum Path SumRehberhard
- 6#236 Lowest Common Ancestor of a Binary TreeRehbermedium