Bir binary tree (ikili ağaç) verildiğinde, level order traversal (seviye seviye gezme) işlemini gerçekleştirip sonucu döndürmemiz isteniyor.
Bu soruyu BFS (Breadth-First Search) ile çözebiliriz. BFS, seviyeleri sırayla dolaşmamıza yardımcı olur. BFS için queue (kuyruk) veri yapısını kullanacağız.
Root düğümünü kuyruğa ekle.
Kuyruktan bir düğüm çıkar ve onun çocuklarını kuyruğa ekle.
Aynı seviyedeki tüm düğümleri işlerken aynı listeye ekle.
Tüm seviyeleri işleyerek sonucu döndür.
Code
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclassSolution:deflevelOrder(self,root:Optional[TreeNode])->List[List[int]]:res=[]#sonuç listesini oluştururuz.q=collections.deque()#python que yapsını oluştururuz.q.append(root)#que ilk node olan kökü ekleriz.whileq:#que içinde değer olduğu süreceqLen=len(q)#que boyutunu alırız.level=[]#ağaçdaki basamakların değerlerini burada tutacağız.[3],[9,20]...foriinrange(qLen):node=q.popleft()#quedaki ilk giren değeri al(ilk giren ilk çıkar)ifnode:#node değeri var iselevel.append(node.val)#bunu basamağın değer listesine ekleq.append(node.left)#sol dalında node var ise queya ekleq.append(node.right)#sağ dalında node var ise queya ekleiflevel:#eğer basamakta değer var ise sonuç listesine ekleres.append(level)returnres
Complexity
Time complexity :O(n) Çünkü her düğümü yalnızca bir kez ziyaret ediyoruz.
Space complexity :O(n) En kötü durumda, kuyrukta bir seviyedeki tüm düğümler tutulacağı için O(N) olabilir.