【二叉树】1609. 奇偶树

1609. 奇偶树

解题思路

  • 改造层序遍历算法 针对每一层进行判断
  • 收集当前层的值 然后判断是不是奇数或者偶数 以及顺序
  • 注意如果当前层只有一个节点需要单独判断
  • 如果是偶数层 那么需要list全部都是奇数 然后 还是需要递增
  • 如果是奇数层 那么需要当前层全部都是偶数 而且递减

/**
 * 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> q = new LinkedList<>();
        q.offer(root);

        int depth = 0;// 层序号

        while(!q.isEmpty()){
            int temp = q.size();

            List<Integer> list = new ArrayList<>();// 收集当前层的值 然后判断是不是奇数或者偶数 以及顺序
            // list.add()
            for(int i = 0; i < temp; i++){
                TreeNode cur = q.poll();

                list.add(cur.val);

                if(cur.left != null){
                    q.offer(cur.left);
                }

                if(cur.right != null){
                    q.offer(cur.right);
                }
            }

            // 如果当前层只有一个节点
            if(list.size() == 1){
                if(depth % 2 == 0){
                    if(list.get(0) % 2 == 0){
                        return false;
                    }
                }else{
                    if(list.get(0) % 2 == 1){
                        return false;
                    }
                }
            }
            

            // 当前层全部累加完毕
            if(depth % 2 == 0){
                // if(list.size)
                


                // 如果是偶数层 那么需要list全部都是奇数 然后 还是需要递增
                for(int i = 1; i < list.size(); i++){
                    if(list.get(i) <= list.get(i - 1) || !isOdd(list.get(i))){
                        return false;
                    }
                }
            }else{
                // 如果是奇数层 那么需要当前层全部都是偶数 而且递减
               for(int i = 1; i < list.size(); i++){
                    if(list.get(i) >= list.get(i - 1) || !isEven(list.get(i))){
                        return false;
                    }
                } 
            }
            depth++;
        }

        return true;
        
    }


    public static boolean isOdd(int num){
            return num % 2 == 1;// 奇数
    }

        public static boolean isEven(int num){
            return num % 2 == 0;// 偶数
    }
}

你可能感兴趣的:(#,Leetcode,数据结构,算法)