Skip to content

Commit 3488f3f

Browse files
author
baxiang
committed
105 树结构
1 parent abdf25d commit 3488f3f

File tree

1 file changed

+53
-0
lines changed
  • 105construct-binary-tree-from-preorder-and-inorder-traversal

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package main
2+
3+
import "fmt"
4+
5+
type TreeNode struct {
6+
Val int
7+
Left *TreeNode
8+
Right *TreeNode
9+
}
10+
11+
func buildTree(preorder []int, inorder []int) *TreeNode {
12+
if len(preorder) == 0 {
13+
return nil
14+
}
15+
rootVal := preorder[0]
16+
i := 0
17+
// 查找根节点位置
18+
for ; i < len(inorder); i++ {
19+
if rootVal == inorder[i] {
20+
break
21+
}
22+
}
23+
root := &TreeNode{Val: rootVal}
24+
root.Left = buildTree(preorder[1:i+1], inorder[:i])
25+
root.Right = buildTree(preorder[i+1:], inorder[i+1:])
26+
return root
27+
}
28+
29+
func main() {
30+
r := buildTree([]int{3, 9, 20, 15, 7}, []int{9, 3, 15, 20, 7})
31+
printPreorder(r)
32+
fmt.Println()
33+
printInorder(r)
34+
35+
}
36+
func printPreorder(r *TreeNode) {
37+
if r == nil {
38+
return
39+
}
40+
fmt.Print(r.Val)
41+
printPreorder(r.Left)
42+
printPreorder(r.Right)
43+
}
44+
45+
func printInorder(r *TreeNode) {
46+
if r == nil {
47+
return
48+
}
49+
50+
printInorder(r.Left)
51+
fmt.Print(r.Val)
52+
printInorder(r.Right)
53+
}

0 commit comments

Comments
 (0)