Files
LeetCode-Go/leetcode/1609.Even-Odd-Tree/1609.Even Odd Tree.go
2021-12-27 20:21:09 +08:00

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
}