如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。
来源:力扣(LeetCode)
简单的层次遍历,每次遍历的时候判断节点是否满足要求,用isEvenLevel来存储当前的层数,层数为偶数即为偶数层。
class Solution { public boolean isEvenOddTree(TreeNode root) { Queue<TreeNode> q=new LinkedList<>(); q.add(root); int isEvenLevel=0; while(!q.isEmpty()){ TreeNode lastNode=null; TreeNode node=null; int size=q.size(); while(size>0){ node=q.poll(); if(isEvenLevel%2==0){ if(node.val%2==0) return false; if(lastNode!=null) if(lastNode.val>=node.val) return false; }else{ if(node.val%2==1) return false; if(lastNode!=null) if(lastNode.val<=node.val) return false; } if(node.left!=null) q.add(node.left); if(node.right!=null) q.add(node.right); lastNode=node; size--; } isEvenLevel++; } return true; } }