File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed
construct-binary-tree-from-preorder-and-inorder-traversal Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change 1+ //
2+ // 105. Construct Binary Tree from Preorder and Inorder Traversal
3+ // https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/
4+ // Dale-Study
5+ //
6+ // Created by WhiteHyun on 2024/06/27.
7+ //
8+
9+ /**
10+ * Definition for a binary tree node.
11+ * public class TreeNode {
12+ * public var val: Int
13+ * public var left: TreeNode?
14+ * public var right: TreeNode?
15+ * public init() { self.val = 0; self.left = nil; self.right = nil; }
16+ * public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
17+ * public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
18+ * self.val = val
19+ * self.left = left
20+ * self.right = right
21+ * }
22+ * }
23+ */
24+ class Solution {
25+ func buildTree( _ preorder: [ Int ] , _ inorder: [ Int ] ) -> TreeNode ? {
26+ let indices : [ Int : Int ] = Dictionary ( uniqueKeysWithValues: inorder. enumerated ( ) . map { ( $0. element, $0. offset) } )
27+
28+ var preorderIndex = 0
29+
30+ func build( _ left: Int , _ right: Int ) -> TreeNode ? {
31+ if left > right { return nil }
32+
33+ let rootValue = preorder [ preorderIndex]
34+ preorderIndex += 1
35+ let root = TreeNode ( rootValue)
36+
37+ let mid = indices [ rootValue] !
38+
39+ root. left = build ( left, mid - 1 )
40+ root. right = build ( mid + 1 , right)
41+
42+ return root
43+ }
44+
45+ return build ( 0 , inorder. count - 1 )
46+ }
47+ }
You can’t perform that action at this time.
0 commit comments