Skip to content

Commit d71a9db

Browse files
committed
feat: construct-binary-tree-from-preorder-and-inorder-traversal
1 parent 59a63ab commit d71a9db

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from typing import List
2+
class TreeNode:
3+
def __init__(self, x):
4+
self.val = x
5+
self.left = None
6+
self.right = None
7+
8+
class Solution:
9+
"""
10+
105. 从前序与中序遍历序列构造二叉树
11+
https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
12+
根据一棵树的前序遍历与中序遍历构造二叉树。
13+
前序遍历 preorder = [3,9,20,15,7],根 + 左 + 右
14+
中序遍历 inorder = [9,3,15,20,7],左 + 根 + 右
15+
"""
16+
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
17+
if not preorder or not inorder:
18+
return
19+
20+
# 找到根节点
21+
root = TreeNode(preorder[0])
22+
# 从中序列表中,通过根节点分割左右子树
23+
idx = inorder.index(preorder[0])
24+
root.left = self.buildTree(preorder[1:idx+1], inorder[:idx])
25+
root.right = self.buildTree(preorder[1+idx:], inorder[idx+1:])
26+
27+
return root
28+
29+

0 commit comments

Comments
 (0)