1609. 奇偶树

exiaohu 于 2021-12-25 发布

题目链接:1609. 奇偶树

层次遍历。

from typing import Optional


# 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:
        if root is None:
            return True

        level, nodes = 0, [root]

        while len(nodes) > 0:
            next_nodes, prev = [], float('-inf') if level & 1 == 0 else float('inf')
            for node in nodes:
                if (level & 1 == 0 and node.val & 1 == 0) or (level & 1 == 1 and node.val & 1 == 1):
                    return False
                if (level & 1 == 0 and node.val <= prev) or (level & 1 == 1 and node.val >= prev):
                    return False

                prev = node.val

                if node.left is not None:
                    next_nodes.append(node.left)
                if node.right is not None:
                    next_nodes.append(node.right)

            level, nodes = level + 1, next_nodes

        return True