add new solutions

This commit is contained in:
kanna5 2026-01-05 16:48:03 +09:00
parent 0c73608ce5
commit d798d5e8c9
Signed by: kkyy
GPG key ID: 06332F3965E9B0CF
19 changed files with 661 additions and 4 deletions

View 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