Skip to content

Commit 33f616c

Browse files
authored
Merge pull request #163 from karminski/patch-2
Update 0106.Construct-Binary-Tree-from-Inorder-and-Postorder-Traversa…
2 parents c1d27a1 + 21e5e78 commit 33f616c

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ package leetcode
4848
* Right *TreeNode
4949
* }
5050
*/
51-
func buildTree106(inorder []int, postorder []int) *TreeNode {
51+
func buildTree(inorder []int, postorder []int) *TreeNode {
5252
inPos := make(map[int]int)
5353
for i := 0; i < len(inorder); i++ {
5454
inPos[inorder[i]] = i
@@ -68,6 +68,22 @@ func buildInPos2TreeDFS(post []int, postStart int, postEnd int, inStart int, inP
6868
return root
6969
}
7070

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+
}
7187
```
7288

7389

0 commit comments

Comments
 (0)