题目如下:
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 index1
, their children are at level index2
, 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, returntrue
if the binary tree is Even-Odd, otherwise returnfalse
.
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: trueExample 5:
Input: root = [11,8,6,1,3,9,11,30,20,18,16,12,10,4,2,17] Output: trueConstraints:
- 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