Skip to content

Commit 544167d

Browse files
committedNov 4, 2024·
re-solve "105. Construct Binary Tree from Preorder and Inorder Traversal"
1 parent d0c5307 commit 544167d

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed
 

‎src/construct_binary_tree_from_preorder_and_inorder_traversal.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,28 @@ class Solution:
55
def buildTree(
66
self, preorder: list[int], inorder: list[int]
77
) -> TreeNode | None:
8-
if not preorder or not inorder:
9-
return None
8+
root_pre_i = 0
109

11-
preorder_iter = iter(preorder)
10+
def dfs(left: int, right: int) -> TreeNode | None:
11+
nonlocal root_pre_i
1212

13-
def get_node(start: int, stop: int) -> TreeNode | None:
14-
if start == stop:
13+
if left > right:
1514
return None
16-
root = TreeNode(next(preorder_iter))
17-
root_idx = inorder.index(root.val)
1815

19-
root.left = get_node(start, root_idx)
20-
root.right = get_node(root_idx + 1, stop)
16+
value = preorder[root_pre_i]
17+
root_in_i = val_to_index[value]
18+
node = TreeNode(value)
2119

22-
return root
20+
root_pre_i += 1
2321

24-
return get_node(0, len(preorder))
22+
node.left = dfs(left, root_in_i - 1)
23+
node.right = dfs(root_in_i + 1, right)
24+
25+
return node
26+
27+
val_to_index: dict[int, int] = {}
28+
29+
for i, val in enumerate(inorder):
30+
val_to_index[val] = i
31+
32+
return dfs(0, len(preorder) - 1)

0 commit comments

Comments
 (0)
Please sign in to comment.