Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal
Soru
Given two integer arrays preorder and inorder where preorder is the preorder traversal of a binary tree and inorder is the inorder traversal of the same tree, construct and return the binary tree.
Bu soruda, preorder ve inorder dizileri verilmiş, ve bu iki traversala göre binary tree’yi yeniden oluşturmamız isteniyor.
Binary Tree Traversal Özellikleri:
Preorder (Root - Left - Right): İlk eleman her zaman root’tur.
Inorder (Left - Root - Right): Root’un solundakiler sol subtree, sağındakiler sağ subtree’dir.
Preorder’daki ilk elemanı root olarak al.
Bu root elemanını inorder’da bul ve konumuna göre sol ve sağ alt ağaçları ayır.
Aynı işlemi recursive olarak sol ve sağ taraflar için uygula.
Code
classSolution:defbuildTree(self,preorder:List[int],inorder:List[int])->Optional[TreeNode]:ifnotpreorderornotinorder:returnNone# Root node preorder'ın ilk elemanıroot_val=preorder[0]root=TreeNode(root_val)# Root'un inorder'daki index'ini bulmid=inorder.index(root_val)# Sol ve sağ subtree'leri recursive olarak kurroot.left=self.buildTree(preorder[1:1+mid],inorder[:mid])root.right=self.buildTree(preorder[1+mid:],inorder[mid+1:])returnroot
Complexity
Optimize Edilmiş Versiyon (O(n) zaman)
inorder dizisindeki indeksleri bir hashmap ile önceden kaydedersen, her root’un index’ini O(1) sürede bulabilirsin: