1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| // @Title: 从前序与中序遍历序列构造二叉树 (Construct Binary Tree from Preorder and Inorder Traversal)
// @Author: 15816537946@163.com
// @Date: 2020-08-30 16:38:12
// @Runtime: 4 ms
// @Memory: 3.8 MB
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder) == 0 {
return nil
}
res := &TreeNode{
Val: preorder[0],
}
// 只有一个节点,不需要再找左右节点
if len(preorder) == 1 {
return res
}
idx := indexOf(res.Val, inorder)
res.Left = buildTree(preorder[1:idx+1], inorder[:idx])
res.Right = buildTree(preorder[idx+1:], inorder[idx+1:])
return res
}
func indexOf(val int, in []int) int {
for i, v := range in {
if v == val {
return i
}
}
return 0
}
|