<p>A binary tree is named <strong>Even-Odd</strong> if it meets the following conditions:</p>

<ul>
	<li>The root of the binary tree is at level index <code>0</code>, its children are at level index <code>1</code>, their children are at level index <code>2</code>, etc.</li>
	<li>For every <strong>even-indexed</strong> level, all nodes at the level have <strong>odd</strong> integer values in <strong>strictly increasing</strong> order (from left to right).</li>
	<li>For every <b>odd-indexed</b> level, all nodes at the level have <b>even</b> integer values in <strong>strictly decreasing</strong> order (from left to right).</li>
</ul>

<p>Given the <code>root</code> of a binary tree, <em>return </em><code>true</code><em> if the binary tree is <strong>Even-Odd</strong>, otherwise return </em><code>false</code><em>.</em></p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/09/15/sample_1_1966.png" style="width: 362px; height: 229px;" />
<pre>
<strong>Input:</strong> root = [1,10,4,3,null,7,9,12,8,6,null,null,2]
<strong>Output:</strong> true
<strong>Explanation:</strong> The node values on each level are:
Level 0: [1]
Level 1: [10,4]
Level 2: [3,7,9]
Level 3: [12,8,6,2]
Since levels 0 and 2 are all odd and increasing and levels 1 and 3 are all even and decreasing, the tree is Even-Odd.
</pre>

<p><strong class="example">Example 2:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/09/15/sample_2_1966.png" style="width: 363px; height: 167px;" />
<pre>
<strong>Input:</strong> root = [5,4,2,3,3,7]
<strong>Output:</strong> false
<strong>Explanation:</strong> The node values on each level are:
Level 0: [5]
Level 1: [4,2]
Level 2: [3,3,7]
Node values in level 2 must be in strictly increasing order, so the tree is not Even-Odd.
</pre>

<p><strong class="example">Example 3:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/09/22/sample_1_333_1966.png" style="width: 363px; height: 167px;" />
<pre>
<strong>Input:</strong> root = [5,9,1,3,5,7]
<strong>Output:</strong> false
<strong>Explanation:</strong> Node values in the level 1 should be even integers.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li>The number of nodes in the tree is in the range <code>[1, 10<sup>5</sup>]</code>.</li>
	<li><code>1 &lt;= Node.val &lt;= 10<sup>6</sup></code></li>
</ul>

# 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
        self.level = None
class Solution:
    def isEvenOddTree(self, root: Optional[TreeNode]) -> bool:
        bfs_list = [root]
        root.level = 0
        x = root
        idx = 0
        level_map = {0:[root.val]}
        
        while len(bfs_list) > 0:
            x = bfs_list.pop(0)
            if x is None:
                continue
            if x.level+1 not in level_map:
                level_map[x.level+1] = []
            if x.left is not None:
                x.left.level = x.level + 1
                level_map[x.level+1].append(x.left.val)
                bfs_list.append(x.left)
            if x.right is not None:
                x.right.level = x.level + 1
                level_map[x.level+1].append(x.right.val)  
                bfs_list.append(x.right)
            
        # print(level_map)
        check = True
        for level in level_map:
            check = check and self.check_order(level, level_map[level])
            if not check:
                return False
        return check

    def check_order(self, level, level_list):
        check = True
        if level%2==0:
            for i in range(len(level_list)-1):
                check = check and (level_list[i] %2==1 and level_list[i]<level_list[i+1])
            if len(level_list) > 0:
                check = check and level_list[-1] % 2 == 1
        else:
            for i in range(len(level_list)-1):
                check = check and (level_list[i] %2 == 0 and level_list[i]>level_list[i+1])
            if len(level_list) > 0:
                check = check and level_list[-1] % 2 == 0
        # print(level, level_list, check)
        return check

        
54235