Even Odd Tree

MediumTreeBreadth-First SearchBinary Tree

Solution

import { TreeNode } from '@algorithm/lib';
 
export function isEvenOddTree(root: TreeNode | null): boolean {
  if (!root) {
    return true;
  }
 
  let nodes = [root];
  let level = 0;
  while (0 < nodes.length) {
    const nextNodes: TreeNode[] = [];
 
    let prevValue = Number.MIN_SAFE_INTEGER;
    for (const node of nodes) {
      const currentValue = level % 2 === 0 ? node.val : -node.val;
      if (level % 2 === node.val % 2 || prevValue >= currentValue) {
        return false;
      }
      prevValue = currentValue;
      node.left && nextNodes.push(node.left);
      node.right && nextNodes.push(node.right);
    }
    nodes = nextNodes;
    level += 1;
  }
 
  return true;
}