#
(2020-02-08) LeetCode
- [105. ](https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/)
- [106. ](https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/)
- [889. ](https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-postorder-traversal/)
## 105.
###
```
:
preorder =[3,9,20,15,7]
inorder = [9,3,15,20,7]
3
/ \
9 20
/ \
15 7
```
###

`` preorder val inorder inorder i
`` i i


preorder 9

preorder 20 1


inorder preorder
###
Python3
Python3 Code:
```python
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
# inorder postorder
if not preorder:
return None
root = TreeNode(preorder[0])
i = inorder.index(root.val)
root.left = self.buildTree(preorder[1:i + 1], inorder[:i])
root.right = self.buildTree(preorder[i + 1:], inorder[i+1:])
return root
```
****
- inorder preorder 1 N $O(N)$ N
- N $O(N)$ N
>
## 106.
###
```
:
inorder =[9,3,15,20,7]
postorder = [9,15,7,20,3]
3
/ \
9 20
/ \
15 7
```
###

`` postorder val inorder inorder i
`` i i


1 postorder 20


inorder postorder
###
Python3
Python3 Code:
```python
class Solution:
def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
# inorder postorder
if not inorder:
return None
root = TreeNode(postorder[-1])
i = inorder.index(root.val)
root.left = self.buildTree(inorder[:i], postorder[:i])
root.right = self.buildTree(inorder[i+1:], postorder[i:-1])
return root
```
****
- inorder postorder 1 N $O(N)$ N
- N $O(N)$ N
>
## 889.
###
```
prepost
pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1]
[1,2,3,4,5,6,7]
1
##
1 1
```python
node.left = self.constructFromPrePost(pre[1:i + 2], post[:i + 1])
node.right = self.constructFromPrePost(pre[i + 2:], post[i + 1:-1])
```
pre pre[1:i + 2] pre[i + 2:] 1 pre
post post[:i + 1] post[i + 1:-1] 1 post
##
LeetCode https://github.com/azl397985856/leetcode 37K star
LeetCode
