zoukankan      html  css  js  c++  java
  • [LeetCode] 1609. Even Odd Tree

    A binary tree is named Even-Odd if it meets the following conditions:

    • The root of the binary tree is at level index 0, its children are at level index 1, their children are at level index 2, etc.
    • For every even-indexed level, all nodes at the level have odd integer values in strictly increasing order (from left to right).
    • For every odd-indexed level, all nodes at the level have even integer values in strictly decreasing order (from left to right).

    Given the root of a binary tree, return true if the binary tree is Even-Odd, otherwise return false.

    Example 1:

    Input: root = [1,10,4,3,null,7,9,12,8,6,null,null,2]
    Output: true
    Explanation: The node values on each level are:
    Level 0: [1]
    Level 1: [10,4]
    Level 2: [3,7,9]
    Level 3: [12,8,6,2]
    Since levels 0 and 2 are all odd and increasing, and levels 1 and 3 are all even and decreasing, the tree is Even-Odd.
    

    Example 2:

    Input: root = [5,4,2,3,3,7]
    Output: false
    Explanation: The node values on each level are:
    Level 0: [5]
    Level 1: [4,2]
    Level 2: [3,3,7]
    Node values in the level 2 must be in strictly increasing order, so the tree is not Even-Odd.
    

    Example 3:

    Input: root = [5,9,1,3,5,7]
    Output: false
    Explanation: Node values in the level 1 should be even integers.
    

    Example 4:

    Input: root = [1]
    Output: true
    

    Example 5:

    Input: root = [11,8,6,1,3,9,11,30,20,18,16,12,10,4,2,17]
    Output: true

    Constraints:

    • The number of nodes in the tree is in the range [1, 105].
    • 1 <= Node.val <= 106

    奇偶树。

    如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :

    二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
    偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
    奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
    给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/even-odd-tree
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    这道题就是比较常规的BFS思路做,无非是在遍历的过程中根据题意多一些额外的判断,用一个boolean变量去track到底是在奇数层还是在偶数层,然后根据当前层的奇偶性来判断到底节点们应该是单调增还是单调减。

    时间O(n)

    空间O(n)

    Java实现

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode() {}
     8  *     TreeNode(int val) { this.val = val; }
     9  *     TreeNode(int val, TreeNode left, TreeNode right) {
    10  *         this.val = val;
    11  *         this.left = left;
    12  *         this.right = right;
    13  *     }
    14  * }
    15  */
    16 class Solution {
    17     public boolean isEvenOddTree(TreeNode root) {
    18         // corner case
    19         if (root == null) {
    20             return true;
    21         }
    22 
    23         // normal case
    24         Queue<TreeNode> queue = new LinkedList<>();
    25         queue.offer(root);
    26         boolean even = true;
    27         while (!queue.isEmpty()) {
    28             int size = queue.size();
    29             int prev = even ? Integer.MIN_VALUE : Integer.MAX_VALUE;
    30             for (int i = 0; i < size; i++) {
    31                 TreeNode cur = queue.poll();
    32                 if (even && (cur.val % 2 == 0 || cur.val <= prev)) {
    33                     return false;
    34                 }
    35                 if (!even && (cur.val % 2 == 1 || cur.val >= prev)) {
    36                     return false;
    37                 }
    38                 prev = cur.val;
    39                 if (cur.left != null) {
    40                     queue.offer(cur.left);
    41                 }
    42                 if (cur.right != null) {
    43                     queue.offer(cur.right);
    44                 }
    45             }
    46             even = !even;
    47         }
    48         return true;
    49     }
    50 }

    LeetCode 题目总结

  • 相关阅读:
    js拖拽效果 javascript实现将元素拖拽如某容器效果demo
    使用 transform3D 造成网页闪动的底层原因剖析
    设置文字垂直 竖向 显示
    文本光标,高亮选中一些出来
    HTMl5的sessionStorage和localStorage
    event 事件兼容性处理 keycode 大全
    收藏个支持进度条与文件拖拽上传的js File Uploader
    three.js 3D效果
    Winform下的地图开发控件(GMap.NET)使用心得
    ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷
  • 原文地址:https://www.cnblogs.com/cnoodle/p/14111862.html
Copyright © 2011-2022 走看看