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

    解题思路:题目不难,就是一个二叉树的层序遍历。由于每一层的所有节点的值是递增或者递减,因此遍历过程中要记录每一层上一个遍历的节点的值,用以和当前节点的值比较。

    代码如下:

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution(object):
        dic = {}
        res = True
        def recursive(self,node,level):
            if self.res == False:
                return
            elif level % 2 == 0:
                if node.val % 2 == 0:
                    self.res = False
                    return
                elif self.dic.has_key(level) == False:
                    self.dic[level] = node.val
                    if node.left != None:
                        self.recursive(node.left,level+1)
                    if node.right != None:
                        self.recursive(node.right, level + 1)
                elif self.dic[level] >= node.val:
                    self.res = False
                    return
                else:
                    self.dic[level] = node.val
                    if node.left != None:
                        self.recursive(node.left,level+1)
                    if node.right != None:
                        self.recursive(node.right, level + 1)
            elif level % 2 == 1:
                if node.val % 2 == 1:
                    self.res = False
                    return
                elif self.dic.has_key(level) == False:
                    self.dic[level] = node.val
                    if node.left != None:
                        self.recursive(node.left,level+1)
                    if node.right != None:
                        self.recursive(node.right, level + 1)
                elif self.dic[level] <= node.val:
                    self.res = False
                    return
                else:
                    self.dic[level] = node.val
                    if node.left != None:
                        self.recursive(node.left,level+1)
                    if node.right != None:
                        self.recursive(node.right, level + 1)
        def isEvenOddTree(self, root):
            """
            :type root: TreeNode
            :rtype: bool
            """
            self.res = True
            self.dic = {}
            self.recursive(root,0)
            return self.res
            
  • 相关阅读:
    Python环境搭建
    appium的android端的环境搭建(Window)
    Unittest中常用的十四种断言方法
    Leetcode-141(判断链表是否存在环)
    Leetcode-88(归并两个有序数组)
    Leetcode-680(回文字符串)
    Leetcode-345(反转字符串中的元音字符)
    Leetcode-633 (两数平方和)
    Leetcode-167(有序数组的 Two Sum)
    判断是否为小数
  • 原文地址:https://www.cnblogs.com/seyjs/p/14931088.html
Copyright © 2011-2022 走看看