Leetcode 572 Subtree of Another Tree
Soru
Given the roots of two binary trees root and subRoot, return true if there is a subtree of root with the same structure and node values of subRoot and false otherwise.
A subtree of a binary tree tree is a tree that consists of a node in tree and all of this node’s descendants. The tree tree could also be considered as a subtree of itself.
Örnek 1

Input: root = [3,4,5,1,2], subRoot = [4,1,2]
Output: true
Örnek 2

Input: root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
Output: false
Çözüm DFS
-
Bu soru, bir ikili ağacın (root) içinde, verilen başka bir ağacın (subRoot) olup olmadığını kontrol etmeyi gerektirir.
-
İki yardımcı fonksiyon kullanırız:
-
isSameTree(p, q) → p ve q ağaçlarının tamamen aynı olup olmadığını kontrol eder.
-
isSubtree(root, subRoot) → root ağacının her düğümünü dolaşarak subRoot ile eşleşen bir düğüm olup olmadığını kontrol eder.
-
Adımlar:
-
root düğümüne bakarız, eğer root ile subRoot birebir aynıysa True döndürürüz.
-
Eğer eşleşme yoksa root’un sol ve sağ alt ağaçlarında subRoot olup olmadığını kontrol ederiz.
-
Alt ağaçları rekürsif olarak tarayarak çözümü tamamlarız.
Code
class Solution:
def isSubtree(self, root: TreeNode, subRoot: TreeNode) -> bool:
if not root:
return False # root None olduysa, subRoot bulunamaz.
if self.isSameTree(root, subRoot):
return True # Eğer root ile subRoot tamamen aynıysa True döndür
# Alt ağaçlarda aramaya devam et (sol ve sağ alt ağaçlar)
return self.isSubtree(root.left, subRoot) or self.isSubtree(root.right, subRoot)
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True # İkisi de None ise aynı
if not p or not q or p.val != q.val:
return False # Biri None veya değerleri farklıysa farklı
# Sol ve sağ alt ağaçları da karşılaştır
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
Complexity
- Time complexity (Zaman Karmaşıklığı): O(m * n) (Her düğümde isSameTree çağrıldığı için)
- Space complexity (Alan Karmaşıklığı): O(n) (Recursive çağrılar için çağrı yığını kullanılır)