Skip to content

Commit c1d27a1

Browse files
committed
Update solution 0105
1 parent 3de30e7 commit c1d27a1

File tree

2 files changed

+40
-14
lines changed

2 files changed

+40
-14
lines changed

leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/105. Construct Binary Tree from Preorder and Inorder Traversal.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,23 @@ type TreeNode = structures.TreeNode
1616
* }
1717
*/
1818

19+
// 解法一, 直接传入需要的 slice 范围作为输入, 可以避免申请对应 inorder 索引的内存, 内存使用(leetcode test case) 4.7MB -> 4.3MB.
1920
func buildTree(preorder []int, inorder []int) *TreeNode {
21+
if len(preorder) == 0 {
22+
return nil
23+
}
24+
root := &TreeNode{Val: preorder[0]}
25+
for pos, node := range inorder {
26+
if node == root.Val {
27+
root.Left = buildTree(preorder[1:pos+1], inorder[:pos])
28+
root.Right = buildTree(preorder[pos+1:], inorder[pos+1:])
29+
}
30+
}
31+
return root
32+
}
33+
34+
// 解法二
35+
func buildTree1(preorder []int, inorder []int) *TreeNode {
2036
inPos := make(map[int]int)
2137
for i := 0; i < len(inorder); i++ {
2238
inPos[inorder[i]] = i

website/content/ChapterFour/0100~0199/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal.md

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ Return the following binary tree:
4242

4343
package leetcode
4444

45+
import (
46+
"github.com/halfrost/LeetCode-Go/structures"
47+
)
48+
49+
// TreeNode define
50+
type TreeNode = structures.TreeNode
51+
4552
/**
4653
* Definition for a binary tree node.
4754
* type TreeNode struct {
@@ -50,7 +57,24 @@ package leetcode
5057
* Right *TreeNode
5158
* }
5259
*/
60+
61+
// 解法一, 直接传入需要的 slice 范围作为输入, 可以避免申请对应 inorder 索引的内存, 内存使用(leetcode test case) 4.7MB -> 4.3MB.
5362
func buildTree(preorder []int, inorder []int) *TreeNode {
63+
if len(preorder) == 0 {
64+
return nil
65+
}
66+
root := &TreeNode{Val: preorder[0]}
67+
for pos, node := range inorder {
68+
if node == root.Val {
69+
root.Left = buildTree(preorder[1:pos+1], inorder[:pos])
70+
root.Right = buildTree(preorder[pos+1:], inorder[pos+1:])
71+
}
72+
}
73+
return root
74+
}
75+
76+
// 解法二
77+
func buildTree1(preorder []int, inorder []int) *TreeNode {
5478
inPos := make(map[int]int)
5579
for i := 0; i < len(inorder); i++ {
5680
inPos[inorder[i]] = i
@@ -70,20 +94,6 @@ func buildPreIn2TreeDFS(pre []int, preStart int, preEnd int, inStart int, inPos
7094
return root
7195
}
7296

73-
// 解法 2, 直接传入需要的 slice 范围作为输入, 可以避免申请对应 inorder 索引的内存, 内存使用(leetcode test case) 4.7MB -> 4.3MB.
74-
func buildTree(preorder []int, inorder []int) *TreeNode {
75-
if len(preorder) == 0 {
76-
return nil
77-
}
78-
root := &TreeNode{Val:preorder[0]}
79-
for pos, node := range inorder {
80-
if node == root.Val {
81-
root.Left = buildTree(preorder[1:pos+1], inorder[:pos])
82-
root.Right = buildTree(preorder[pos+1:], inorder[pos+1:])
83-
}
84-
}
85-
return root
86-
}
8797

8898
```
8999

0 commit comments

Comments
 (0)