Skip to content

Commit cc1f257

Browse files
Create 105. 从前序与中序遍历序列构造二叉树.md
1 parent 8d08b73 commit cc1f257

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#### 105. 从前序与中序遍历序列构造二叉树
2+
3+
难度:中等
4+
5+
---
6+
7+
给定两个整数数组 `preorder``inorder` ,其中 `preorder` 是二叉树的 **先序遍历**`inorder` 是同一棵树的 **中序遍历** ,请构造二叉树并返回其根节点。
8+
9+
**示例 1:**
10+
11+
![](https://assets.leetcode.com/uploads/2021/02/19/tree.jpg)
12+
```
13+
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
14+
输出: [3,9,20,null,null,15,7]
15+
```
16+
17+
**示例 2:**
18+
19+
```
20+
输入: preorder = [-1], inorder = [-1]
21+
输出: [-1]
22+
```
23+
24+
**提示:**
25+
26+
* `1 <= preorder.length <= 3000`
27+
* `inorder.length == preorder.length`
28+
* `-3000 <= preorder[i], inorder[i] <= 3000`
29+
* `preorder` 和 `inorder` 均 **无重复** 元素
30+
* `inorder` 均出现在 `preorder`
31+
* `preorder`  **保证** 为二叉树的前序遍历序列
32+
* `inorder`  **保证** 为二叉树的中序遍历序列
33+
34+
---
35+
36+
深度搜索优先:
37+
38+
每次递归对前序序列和中序序列做切片。具体切到什么位置,拿示例推理一遍。
39+
40+
```Go
41+
/**
42+
* Definition for a binary tree node.
43+
* type TreeNode struct {
44+
* Val int
45+
* Left *TreeNode
46+
* Right *TreeNode
47+
* }
48+
*/
49+
func buildTree(preorder []int, inorder []int) *TreeNode {
50+
for i := range inorder {
51+
if inorder[i] == preorder[0] {
52+
return &TreeNode{
53+
Val: inorder[i],
54+
Left: buildTree(preorder[1:i+1], inorder[:i]),
55+
Right: buildTree(preorder[i+1:], inorder[i+1:]),
56+
}
57+
}
58+
}
59+
return nil
60+
}
61+
```

0 commit comments

Comments
 (0)