如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isEvenOddTree(TreeNode root) {
Queue<TreeNode> queue=new ArrayDeque<TreeNode>();
queue.offer(root);
int level=0; //层数
while(!queue.isEmpty()){
int size=queue.size(); //该层节点数量
int prev=level%2==0?Integer.MIN_VALUE:Integer.MAX_VALUE; //递减则为max,递增则为min
for(int i=0;i<size;i++){ //循环该层节点
TreeNode node=queue.poll();
int value=node.val;
if(level%2==value%2){
return false;
}
if ((level % 2 == 0 && value <= prev) || (level % 2 == 1 && value >= prev)) { //判断单调性
return false;
}
prev = value;
//放入下一层节点
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
level++; //层数+1
}
return true;
}
}