add new solutions
This commit is contained in:
parent
0c73608ce5
commit
d798d5e8c9
19 changed files with 661 additions and 4 deletions
55
solutions/1/q103/solution.go
Normal file
55
solutions/1/q103/solution.go
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
package q103
|
||||
|
||||
import "slices"
|
||||
|
||||
type TreeNode struct {
|
||||
Val int
|
||||
Left *TreeNode
|
||||
Right *TreeNode
|
||||
}
|
||||
|
||||
func zigzagLevelOrder(root *TreeNode) [][]int {
|
||||
ret := [][]int{}
|
||||
if root == nil {
|
||||
return ret
|
||||
}
|
||||
|
||||
dpth := 1
|
||||
buf := make([]int, 512)
|
||||
row := buf[:0]
|
||||
|
||||
type qElem struct {
|
||||
depth int
|
||||
node *TreeNode
|
||||
}
|
||||
queue := make([]qElem, 0, 256)
|
||||
queue = append(queue, qElem{depth: 1, node: root})
|
||||
for ; len(queue) > 0; queue = queue[1:] {
|
||||
c := queue[0]
|
||||
if c.depth > dpth {
|
||||
if dpth%2 == 0 {
|
||||
slices.Reverse(row)
|
||||
}
|
||||
ret = append(ret, make([]int, len(row)))
|
||||
copy(ret[len(ret)-1], row)
|
||||
|
||||
dpth = c.depth
|
||||
row = buf[:0]
|
||||
}
|
||||
|
||||
row = append(row, c.node.Val)
|
||||
if c.node.Left != nil {
|
||||
queue = append(queue, qElem{depth: c.depth + 1, node: c.node.Left})
|
||||
}
|
||||
if c.node.Right != nil {
|
||||
queue = append(queue, qElem{depth: c.depth + 1, node: c.node.Right})
|
||||
}
|
||||
}
|
||||
if dpth%2 == 0 {
|
||||
slices.Reverse(row)
|
||||
}
|
||||
ret = append(ret, row)
|
||||
return ret
|
||||
}
|
||||
|
||||
var _ = zigzagLevelOrder
|
||||
Loading…
Add table
Add a link
Reference in a new issue