Skip to content

Commit 6e74af9

Browse files
committed
Update solution 0106
1 parent 33f616c commit 6e74af9

File tree

2 files changed

+45
-16
lines changed

2 files changed

+45
-16
lines changed

leetcode/0106.Construct-Binary-Tree-from-Inorder-and-Postorder-Traversal/106. Construct Binary Tree from Inorder and Postorder Traversal.go

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

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

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

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@ Return the following binary tree:
4040

4141
package leetcode
4242

43+
import (
44+
"github.com/halfrost/LeetCode-Go/structures"
45+
)
46+
47+
// TreeNode define
48+
type TreeNode = structures.TreeNode
49+
4350
/**
4451
* Definition for a binary tree node.
4552
* type TreeNode struct {
@@ -48,7 +55,26 @@ package leetcode
4855
* Right *TreeNode
4956
* }
5057
*/
58+
59+
// 解法一, 直接传入需要的 slice 范围作为输入, 可以避免申请对应 inorder 索引的内存, 内存使用(leetcode test case) 4.7MB -> 4.3MB.
5160
func buildTree(inorder []int, postorder []int) *TreeNode {
61+
postorderLen := len(postorder)
62+
if len(inorder) == 0 {
63+
return nil
64+
}
65+
root := &TreeNode{Val: postorder[postorderLen-1]}
66+
postorder = postorder[:postorderLen-1]
67+
for pos, node := range inorder {
68+
if node == root.Val {
69+
root.Left = buildTree(inorder[:pos], postorder[:len(inorder[:pos])])
70+
root.Right = buildTree(inorder[pos+1:], postorder[len(inorder[:pos]):])
71+
}
72+
}
73+
return root
74+
}
75+
76+
// 解法二
77+
func buildTree1(inorder []int, postorder []int) *TreeNode {
5278
inPos := make(map[int]int)
5379
for i := 0; i < len(inorder); i++ {
5480
inPos[inorder[i]] = i
@@ -68,22 +94,7 @@ func buildInPos2TreeDFS(post []int, postStart int, postEnd int, inStart int, inP
6894
return root
6995
}
7096

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

89100

0 commit comments

Comments
 (0)