File tree Expand file tree Collapse file tree 1 file changed +45
-0
lines changed
construct-binary-tree-from-preorder-and-inorder-traversal Expand file tree Collapse file tree 1 file changed +45
-0
lines changed Original file line number Diff line number Diff line change
1
+ # Definition for a binary tree node.
2
+ # class TreeNode:
3
+ # def __init__(self, val=0, left=None, right=None):
4
+ # self.val = val
5
+ # self.left = left
6
+ # self.right = right
7
+ class Solution :
8
+ def buildTree (self , preorder : List [int ], inorder : List [int ]) -> Optional [TreeNode ]:
9
+ """
10
+ Intuition:
11
+ preorder ํธ๋ฆฌ์ ์ฒซ๋ฒ์งธ ์์๋ ํญ์ ๋ฃจํธ์ด๋ค.
12
+ ๋ํ, inorder ํธ๋ฆฌ์์ ๋ฃจํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ left child,
13
+ ์ค๋ฅธ์ชฝ์ right child๋ฅผ ์๋ฏธํ๋ค.
14
+ ๋ฐ๋ผ์ ์ด๋ฅผ ์ด์ฉํด ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๋ค.
15
+
16
+ Time Complexity:
17
+ O(N^2):
18
+ parent_idx๋ฅผ ์ ํํ๋ ๋ฐ์ O(N)์ด ์์๋๊ณ
19
+ ์ต์
์ ๊ฒฝ์ฐ N๋ฒ ์ฌ๊ท ํธ์ถํด์ผ ํ๋ฏ๋ก O(N^2)์ด๋ค.
20
+
21
+ Space Complexity:
22
+ O(N):
23
+ TreeNode๋ N๊ฐ์ ๊ฐ์ ์ ์ฅํ๋ค.
24
+
25
+ Key takeaway:
26
+ ๋ฆฌํธ์ฝ๋์์ ํด๋์ค๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ๋ ๋ค์์ฒ๋ผ ํ๋ ๊ฒ์
27
+ ์ฒ์ ์๊ฒ ๋์๋ค.
28
+ """
29
+ if not preorder :
30
+ return None
31
+
32
+ parent = preorder [0 ]
33
+ parent_idx = inorder .index (parent ) # O(N)
34
+
35
+ left_pre = preorder [1 :parent_idx + 1 ]
36
+ left_in = inorder [:parent_idx ]
37
+ left = self .buildTree (left_pre , left_in )
38
+
39
+ right_pre = preorder [1 + parent_idx :]
40
+ right_in = inorder [1 + parent_idx :]
41
+ right = self .buildTree (right_pre , right_in )
42
+
43
+ tree = TreeNode (parent , left , right )
44
+
45
+ return tree
You canโt perform that action at this time.
0 commit comments