题目描述
如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。
思路
层序遍历,要是生活也像层序遍历一样简单就好了。
代码
class Solution {
public boolean isEvenOddTree(TreeNode root) {
boolean ans = true , jud = true;
Deque<TreeNode> dq = new LinkedList();
dq.add( root );
while( !dq.isEmpty() ){
int size = dq.size();
int val = 0;
if( jud ) val = Integer.MIN_VALUE;
else val = Integer.MAX_VALUE;
while( size > 0 ){
TreeNode tmp = dq.poll();
if( jud && tmp.val%2==1 && tmp.val > val ){
val = tmp.val;
size--;
if( tmp.left!=null ) dq.add( tmp.left );
if( tmp.right!=null ) dq.add( tmp.right );
}
else if( !jud && tmp.val%2==0 && tmp.val < val ) {
val = tmp.val;
size--;
if( tmp.left!=null ) dq.add( tmp.left );
if( tmp.right!=null ) dq.add( tmp.right );
}
else {
return false;
}
}
jud = !jud;
}
return ans;
}
}
if else 处可以合并整理一下,但是太困了