# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isEvenOddTree(self, root: Optional[TreeNode]) -> bool:
even = True
q = deque([root])
while q:
prev = float("-inf") if even else float("inf")
for _ in range(len(q)):
node = q.popleft()
if even and (node.val % 2 == 0 or node.val <= prev):
return False
elif not even and (node.val % 2 == 1 or node.val >= prev):
return False
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
prev = node.val
even = not even
return True# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isEvenOddTree(self, root: Optional[TreeNode]) -> bool:
levels = []
def dfs(node, level):
if not node:
return True
even = level % 2 == 0
if ((even and node.val % 2 == 0) or
(not even and (node.val % 2 == 1))
):
return False
if len(levels) == level:
levels.append(node.val)
else:
if ((even and node.val <= levels[level]) or
(not even and node.val >= levels[level])
):
return False
levels[level] = node.val
return dfs(node.left, level + 1) and dfs(node.right, level + 1)
return dfs(root, 0)# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isEvenOddTree(self, root: Optional[TreeNode]) -> bool:
stack = [(root, 0)]
levels = []
while stack:
node, level = stack.pop()
even = level % 2 == 0
if ((even and node.val % 2 == 0) or
(not even and node.val % 2 == 1)
):
return False
if len(levels) == level:
levels.append(node.val)
else:
if ((even and node.val <= levels[level]) or
(not even and node.val >= levels[level])
):
return False
levels[level] = node.val
if node.right:
stack.append((node.right, level + 1))
if node.left:
stack.append((node.left, level + 1))
return True