Bir binary tree'nin geçerli bir Binary Search Tree olup olmadığını nasıl kontrol edersiniz?

Cevap

Her düğümün yalnızca çocuklarıyla değil, tüm atalarından gelen alt ve üst sınırla karşılaştırılması gerekir. Bu yüzden özyinelemeye (low, high) aralığı taşırız.

Klasik hata

Sadece node.left.val < node.val < node.right.val kontrolü yetmez:

      5
     / \
    1   6
       / \
      3   7

Burada 3, 6'nın solunda olduğu için yerel kontrolü geçer ama kökteki 5'ten küçük olduğu için sağ alt ağaçta olamaz. Ağaç geçersizdir.

Sınır taşıyarak çözüm

def is_valid_bst(root, low=float("-inf"), high=float("inf")):
    if root is None:
        return True
    if not (low < root.val < high):
        return False
    return (is_valid_bst(root.left, low, root.val) and
            is_valid_bst(root.right, root.val, high))

Inorder gezinme ile çözüm

Geçerli bir BST'nin inorder gezinmesi kesin artan bir dizi üretir. Önceki değeri tutup her adımda karşılaştırmak yeterlidir:

def is_valid_bst_inorder(root):
    stack, prev, node = [], None, root
    while stack or node:
        while node:
            stack.append(node)
            node = node.left
        node = stack.pop()
        if prev is not None and node.val <= prev:
            return False
        prev = node.val
        node = node.right
    return True

Karmaşıklık

Her iki yöntem de O(n) zaman, O(h) bellek.

Tekrarlayan değerlere izin verilip verilmediğini sorun; tanıma göre < veya <= değişir.

  1. Binary search'ün zaman karmaşıklığı nedir ve neden?KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  2. Two Sum: toplamı hedefe eşit olan iki elemanın indekslerini bulun.KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  3. Bir parantez dizisinin geçerli olup olmadığını kontrol edin: "({[]})"KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  4. Tek yönlü bağlı listeyi ters çevirin.OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  5. BFS ve DFS arasındaki fark nedir? Hangisini ne zaman kullanırsınız?OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  6. get ve put işlemleri O(1) olan bir LRU Cache tasarlayın.ZorAlgoritmalar & Veri YapılarıYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle