1609. 奇偶树
解题思路
根据奇偶树的性质. 我们针对第i(奇数)层逐个元素遍历, 判断其从左至右是否严格递减 且每项为偶数 我们针对第j(偶数)层逐个元素遍历, 判断其从左至右是否严格递增 且每项为奇数 若满足上述,则符合题意. 因为逐层遍历, 故我们采取BFS最为合适.判断每层是否符合条件即可
代码
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isEvenOddTree = function (root) {
const isOddNum = (num) => !!(num % 2);
let queue = [root];
let depth = 0;
while (queue.length) {
const isOdd = isOddNum(depth);
const nextQueue = [];
let prev = queue.shift();
if (prev.left) nextQueue.push(prev.left);
if (prev.right) nextQueue.push(prev.right);
if ((isOdd && isOddNum(prev.val)) || (!isOdd && !isOddNum(prev.val)))
return false;
for (const node of queue) {
if (isOdd) {
if (isOddNum(node.val)) return false;
if (node.val >= prev.val) return false;
} else {
if (!isOddNum(node.val)) return false;
if (node.val <= prev.val) return false;
}
if (node.left) nextQueue.push(node.left);
if (node.right) nextQueue.push(node.right);
prev = node;
}
depth++;
queue = nextQueue;
}
return true;
};