Skip to content

Commit ca79c4e

Browse files
committed
add golang solution for lcof problem 32
1 parent 88aaf42 commit ca79c4e

File tree

6 files changed

+188
-0
lines changed

6 files changed

+188
-0
lines changed

lcof/面试题32 - I. 从上到下打印二叉树/README.md

+29
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,36 @@ var levelOrder = function(root) {
122122
};
123123
```
124124

125+
### Go
126+
127+
```go
128+
func levelOrder(root *TreeNode) []int {
129+
if root == nil {
130+
return []int{}
131+
}
132+
q := []*TreeNode{}
133+
q = append(q,root)
134+
//层序遍历,用队列,遍历到谁,就把谁的左右结点加入队列
135+
res := []int{}
136+
for len(q) != 0 {
137+
tmp := q[0]
138+
q = q[1:]
139+
res = append(res,tmp.Val)
140+
if tmp.Left != nil {
141+
q = append(q,tmp.Left)
142+
}
143+
if tmp.Right != nil {
144+
q = append(q,tmp.Right)
145+
}
146+
}
147+
return res
148+
}
149+
```
150+
151+
152+
125153
### ...
154+
126155
```
127156
128157
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
func levelOrder(root *TreeNode) []int {
2+
if root == nil {
3+
return []int{}
4+
}
5+
q := []*TreeNode{}
6+
q = append(q,root)
7+
//层序遍历,用队列,遍历到谁,就把谁的左右结点加入队列
8+
res := []int{}
9+
for len(q) != 0 {
10+
tmp := q[0]
11+
q = q[1:]
12+
res = append(res,tmp.Val)
13+
if tmp.Left != nil {
14+
q = append(q,tmp.Left)
15+
}
16+
if tmp.Right != nil {
17+
q = append(q,tmp.Right)
18+
}
19+
}
20+
return res
21+
}

lcof/面试题32 - II. 从上到下打印二叉树 II/README.md

+35
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,42 @@ var levelOrder = function(root) {
142142
};
143143
```
144144

145+
### Go
146+
147+
```go
148+
func levelOrder(root *TreeNode) [][]int {
149+
if root == nil {
150+
return nil
151+
}
152+
res := [][]int{}
153+
queue := []*TreeNode{}
154+
queue = append(queue,root)
155+
for len(queue) != 0 {
156+
size := len(queue)
157+
ans := []int{}
158+
//利用一个变量记录每层大小
159+
for size > 0 {
160+
cur := queue[0]
161+
ans = append(ans, cur.Val)
162+
queue = queue[1:]
163+
size--
164+
if cur.Left != nil {
165+
queue = append(queue, cur.Left)
166+
}
167+
if cur.Right != nil {
168+
queue = append(queue, cur.Right)
169+
}
170+
}
171+
res = append(res, ans)
172+
}
173+
return res
174+
}
175+
```
176+
177+
178+
145179
### ...
180+
146181
```
147182
148183
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
func levelOrder(root *TreeNode) [][]int {
2+
if root == nil {
3+
return nil
4+
}
5+
res := [][]int{}
6+
queue := []*TreeNode{}
7+
queue = append(queue,root)
8+
for len(queue) != 0 {
9+
size := len(queue)
10+
ans := []int{}
11+
//利用一个变量记录每层大小
12+
for size > 0 {
13+
cur := queue[0]
14+
ans = append(ans, cur.Val)
15+
queue = queue[1:]
16+
size--
17+
if cur.Left != nil {
18+
queue = append(queue, cur.Left)
19+
}
20+
if cur.Right != nil {
21+
queue = append(queue, cur.Right)
22+
}
23+
}
24+
res = append(res, ans)
25+
}
26+
return res
27+
}

lcof/面试题32 - III. 从上到下打印二叉树 III/README.md

+42
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,49 @@ var levelOrder = function(root) {
157157
};
158158
```
159159

160+
### Go
161+
162+
```go
163+
func levelOrder(root *TreeNode) [][]int {
164+
if root == nil {
165+
return nil
166+
}
167+
res := [][]int{}
168+
queue := []*TreeNode{}
169+
queue = append(queue,root)
170+
level := 0
171+
for len(queue) != 0 {
172+
size := len(queue)
173+
ans := []int{}
174+
//size记录每层大小,level记录层数
175+
for size > 0 {
176+
cur := queue[0]
177+
if level & 1 == 0 {
178+
ans = append(ans, cur.Val)
179+
} else {
180+
ans = append([]int{cur.Val},ans...)
181+
}
182+
183+
queue = queue[1:]
184+
size--
185+
if cur.Left != nil {
186+
queue = append(queue, cur.Left)
187+
}
188+
if cur.Right != nil {
189+
queue = append(queue, cur.Right)
190+
}
191+
}
192+
level++
193+
res = append(res, ans)
194+
}
195+
return res
196+
}
197+
```
198+
199+
200+
160201
### ...
202+
161203
```
162204
163205
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
func levelOrder(root *TreeNode) [][]int {
2+
if root == nil {
3+
return nil
4+
}
5+
res := [][]int{}
6+
queue := []*TreeNode{}
7+
queue = append(queue,root)
8+
level := 0
9+
for len(queue) != 0 {
10+
size := len(queue)
11+
ans := []int{}
12+
//size记录每层大小,level记录层数
13+
for size > 0 {
14+
cur := queue[0]
15+
if level & 1 == 0 {
16+
ans = append(ans, cur.Val)
17+
} else {
18+
ans = append([]int{cur.Val},ans...)
19+
}
20+
21+
queue = queue[1:]
22+
size--
23+
if cur.Left != nil {
24+
queue = append(queue, cur.Left)
25+
}
26+
if cur.Right != nil {
27+
queue = append(queue, cur.Right)
28+
}
29+
}
30+
level++
31+
res = append(res, ans)
32+
}
33+
return res
34+
}

0 commit comments

Comments
 (0)