[leetcode] 1609. Even Odd Tree

网友投稿 305 2022-08-25

[leetcode] 1609. Even Odd Tree

Description

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: trueExplanation: 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: falseExplanation: 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: falseExplanation: 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 <= 10^6

分析

题目的意思是:判断一棵树是偶数奇数树,在偶数行,树是奇数,递增;在奇数行,树是偶数,递减。显然需要层序遍历,然后偶数行判断是否是递增,奇数行是否是递减就行了。用队列实现层序遍历。我看了一下别人的实现,跟我的思路差不多。

代码

# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def isEvenOddTree(self, root: TreeNode) -> bool: q=collections.deque() q.append(root) level=0 while(q): n=len(q) if(level%2==0): prev=0 else: prev=10**6+1 for i in range(n): node=q.popleft() if(level%2==0 and node.val%2!=1): return False elif(level%2==0 and prev>=node.val): return False if(level%2==1 and node.val%2!=0): return False elif(level%2==1 and prev<=node.val): return False if(node.left): q.append(node.left) if(node.right): q.append(node.right) prev=node.val level+=1 return True

参考文献

​​[LeetCode] Python easy BFS level-order traversal​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[leetcode] 929. Unique Email Addresses
下一篇:营销案例精选:元气森林的对手越来越多了。。。(元气森林的营销战略)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~