mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 08:27:30 +08:00
73 lines
1.0 KiB
Go
73 lines
1.0 KiB
Go
package leetcode
|
|
|
|
type TreeNode struct {
|
|
Val int
|
|
Left *TreeNode
|
|
Right *TreeNode
|
|
}
|
|
|
|
func isEvenOddTree(root *TreeNode) bool {
|
|
level := 0
|
|
queue := []*TreeNode{root}
|
|
for len(queue) != 0 {
|
|
length := len(queue)
|
|
var nums []int
|
|
for i := 0; i < length; i++ {
|
|
node := queue[i]
|
|
if node.Left != nil {
|
|
queue = append(queue, node.Left)
|
|
}
|
|
if node.Right != nil {
|
|
queue = append(queue, node.Right)
|
|
}
|
|
nums = append(nums, node.Val)
|
|
}
|
|
if level%2 == 0 {
|
|
if !even(nums) {
|
|
return false
|
|
}
|
|
} else {
|
|
if !odd(nums) {
|
|
return false
|
|
}
|
|
}
|
|
queue = queue[length:]
|
|
level++
|
|
}
|
|
return true
|
|
}
|
|
|
|
func odd(nums []int) bool {
|
|
cur := nums[0]
|
|
if cur%2 != 0 {
|
|
return false
|
|
}
|
|
for _, num := range nums[1:] {
|
|
if num >= cur {
|
|
return false
|
|
}
|
|
if num%2 != 0 {
|
|
return false
|
|
}
|
|
cur = num
|
|
}
|
|
return true
|
|
}
|
|
|
|
func even(nums []int) bool {
|
|
cur := nums[0]
|
|
if cur%2 == 0 {
|
|
return false
|
|
}
|
|
for _, num := range nums[1:] {
|
|
if num <= cur {
|
|
return false
|
|
}
|
|
if num%2 == 0 {
|
|
return false
|
|
}
|
|
cur = num
|
|
}
|
|
return true
|
|
}
|