0Pricing
Coding Interview Prep · Ders

Kuruluş Şemasını Dolaşma

Bir çalışan-yönetici hiyerarşisini istenen derinliğe kadar izleyin.

Kuruluş Şemasını Dolaşma, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.

Organizasyon Şeması Sorusu

“employees tablosunda id, name ve manager_id olduğunu varsayalım; belirli bir yöneticinin altında bulunan herkesi, herhangi bir derinliğe kadar listeleyin.” Bu, yinelemeli CTE'lerle ilgili en yaygın görüşme sorularından biridir.

Tablo kendine referans verir: manager_id, başka bir satırın id değerine işaret eder. Bu derste yapıyı hem aşağı doğru (astları) hem de yukarı doğru (komuta zincirini) dolaşacaksınız.

Örnek Tablo

Bu verileri gözünüzde canlandırın. CEO'nun yöneticisi NULL değerine sahiptir. Diğer herkes zincirde yukarı doğru bir yöneticiye bağlıdır.

  • 1 Ada (yönetici NULL)
  • 2 Ben (yönetici 1)
  • 3 Cleo (yönetici 1)
  • 4 Dan (yönetici 2)
  • 5 Eve (yönetici 4)

Dolayısıyla derinlik şöyledir: Ada → Ben → Dan → Eve. Yapıyı dolaşırken bunu aklınızda tutun.

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    manager_id INT REFERENCES employees(id)
);

Bir Yöneticiden Aşağı Doğru İlerleme

Seçilen bir yöneticinin altındaki tüm astları listelemek için başlangıç üyesi o yöneticiyi (veya doğrudan astlarını) seçer, yinelemeli üye de manager_id değerini aşağı doğru izler.

Burada Ben'den (kimlik 2) başlayıp onun altındaki herkesi topluyoruz.

WITH RECURSIVE subtree AS (
    SELECT id, name, manager_id, 1 AS depth
    FROM employees WHERE id = 2
    UNION ALL
    SELECT e.id, e.name, e.manager_id, s.depth + 1
    FROM employees e
    JOIN subtree s ON e.manager_id = s.id
)
SELECT name, depth FROM subtree ORDER BY depth;

Çıktıyı Okuma

Yukarıdaki sorgu, Ben'i 1. derinlikte, Dan'ı 2. derinlikte ve Eve'i 3. derinlikte döndürür. Başlangıç üyesi Ben'i başlangıç satırı olarak aldı; birinci yineleme yöneticisi Ben olan Dan'ı buldu; ikinci yineleme yöneticisi Dan olan Eve'i buldu; üçüncü yineleme kimseyi bulamadığı için yineleme durdu.

Görüşmeci “Eve, Ben'in kaç düzey altında bulunuyor?” diye sorarsa, depth sütunu yanıtı doğrudan verir: 3 eksi 1, 2 düzey eder.

CEO'ya Doğru Yukarı İlerleme

Ters yöndeki soru da en az bunun kadar yaygındır: “Eve'in CEO'ya kadar uzanan tam komuta zincirini gösterin.” Birleşim yönünü tersine çevirin — yinelemeli üye artık mevcut satırın manager_id değerini izleyerek üst öğeye doğru ilerler.

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id, 1 AS lvl
    FROM employees WHERE id = 5
    UNION ALL
    SELECT e.id, e.name, e.manager_id, c.lvl + 1
    FROM employees e
    JOIN chain c ON e.id = c.manager_id
)
SELECT name, lvl FROM chain ORDER BY lvl;

Aşağı ve Yukarı: JOIN Tersine Döner

Aşağı doğru ve yukarı doğru ilerlemek arasındaki tek yapısal fark birleşim koşuludur:

  • Aşağı (astları bulma): e.manager_id = cte.id — yöneticisi elimizdeki satır olan çalışanlarla eşleşir.
  • Yukarı (yöneticileri bulma): e.id = cte.manager_id — kimliği mevcut satırımızın yöneticisine karşılık gelen çalışanla eşleşir.

Bu yön değişikliğini açıkça ifade edebilmeniz, görüşmeciler üzerinde olumlu bir izlenim bırakır.

Girintili Ağaç Oluşturma

Özenli bir yanıt, boşlukları tekrarlamak için depth değerini kullanarak çıktıyı girintili bir ağaç biçiminde düzenler. Bu, yalnızca hiyerarşiyi hesaplamakla kalmayıp sonuçları sunabildiğinizi gösterir.

WITH RECURSIVE org AS (
    SELECT id, name, 1 AS depth
    FROM employees WHERE manager_id IS NULL
    UNION ALL
    SELECT e.id, e.name, o.depth + 1
    FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT REPEAT('  ', depth - 1) || name AS tree
FROM org
ORDER BY depth;

Yolu Biriktirme

CEO'dan her kişiye giden tam güzergâhı göstermek için bir path dizesi taşıyın. Bu, önceki dersteki tekniğin organizasyon şemasına uygulanmış hâlidir.

WITH RECURSIVE org AS (
    SELECT id, name, CAST(name AS VARCHAR(500)) AS path
    FROM employees WHERE manager_id IS NULL
    UNION ALL
    SELECT e.id, e.name, o.path || ' / ' || e.name
    FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT name, path FROM org ORDER BY path;

Her Yönetici İçin Astları Sayma

Sık sorulan bir devam sorusu şudur: “Her yöneticiye doğrudan veya dolaylı olarak bağlı kaç kişi var?” Her yönetici için yinelemeli alt ağacı kullanın, ardından toplulaştırın. Yaygın bir yaklaşım, yinelemeyi her kök için bir kez çalıştırmak ve başlangıç yöneticisine göre GROUP BY uygulamaktır.

Burada tüm ağacı dolaşıp kökün altındaki satırları sayarak Ada'nın (CEO) altındaki tüm dolaylı astları sayıyoruz.

WITH RECURSIVE org AS (
    SELECT id, name, manager_id, 0 AS depth
    FROM employees WHERE id = 1
    UNION ALL
    SELECT e.id, e.name, e.manager_id, o.depth + 1
    FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT COUNT(*) - 1 AS total_reports FROM org;

Yaygın Hatalar

Görüşmecilerin hazırladığı şu tuzaklara dikkat edin:

  • Yanlış birleşim yönü — yukarı doğru ilerlemek istediğiniz hâlde e.manager_id = cte.id kullanmak yanlış kümeyi döndürür.
  • Başlangıç filtresini unutmak — WHERE id = X koşulunu çıkarırsanız her satırı başlangıç olarak alır ve tüm ormanı döndürürsünüz.
  • Bir eksik veya fazla derinlik — başlangıç satırının 0 mı yoksa 1 mi olduğunu belirleyin ve tutarlı kalın.

Neden Yalnızca Kendisiyle Birleşim Kullanmayalım

Kendisiyle birleşim, sabit sayıda düzeyi getirebilir: doğrudan astlar için bir birleşim, ikinci düzey astlar için iki birleşim ve bu şekilde devam eder. Ancak derinliği önceden bilmeniz ve her düzey için ayrı bir birleşim yazmanız gerekir.

Yinelemeli bir CTE, tek bir sorguda belirsiz ve herhangi bir derinlikteki yapıyı ele alır. Görüşmeci “hiyerarşi herhangi bir sayıda düzey içerebilir” dediğinde, bu sıradan kendisiyle birleşimleri eler ve yinelemeyi işaret eder.

Hızlı Kontrol

Dolaşım yönünü tersine çevirebildiğinizden emin olun.

Özet

Organizasyon şeması üzerinde gezinme, kendisine başvuran bir tabloya uygulanan özyinelemeli iskelettir:

  • Aşağı: bir yöneticiyi başlangıç olarak belirleyin, e.manager_id = cte.id ile birleştirin.
  • Yukarı: bir çalışanı başlangıç olarak belirleyin, e.id = cte.manager_id ile birleştirin.
  • Girintileme için depth, zincirin tamamı için path değerini taşıyın.
  • Özyineleme, bir kendisiyle birleştirmenin yapamayacağı şekilde bilinmeyen her derinliği ele alır.

Sırada: sayı ve tarih dizileri oluşturmak için özyineleme kullanımı.

Sıkça Sorulan Sorular

“Kuruluş Şemasını Dolaşma” dersi ücretsiz mi?

Evet — “Kuruluş Şemasını Dolaşma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.

“Kuruluş Şemasını Dolaşma” dersinde ne öğreneceğim?

Bir çalışan-yönetici hiyerarşisini istenen derinliğe kadar izleyin. Coding Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Coding Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Kuruluş Şemasını Dolaşma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Coding Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Çapa ve Özyinelemeli Üyeler
  2. Kuruluş Şemasını Dolaşma
  3. Sayı ve Tarih Serileri Oluşturma
  4. Sonsuz Özyinelemeden Kaçınma
← Coding Interview Prep Sayfasına Dön