当前位置:网站首页>【二叉树】奇偶树
【二叉树】奇偶树
2022-08-01 16:32:00 【豪冷啊】
0x00 题目
如果一棵二叉树满足下述几个条件
则可以称为 奇偶树:
二叉树根节点所在层下标为 0
根的子节点所在层下标为 1
根的孙节点所在层下标为 2 ,依此类推偶数下标 层上的所有节点的值都是 奇 整数
从左到右按顺序 严格递增奇数下标 层上的所有节点的值都是 偶 整数
从左到右按顺序 严格递减
给你二叉树的根节点
如果二叉树为 奇偶树 ,则返回 true ,否则返回 false
0x01 思路
因为要对每层数值进行判断处理
所以使用层序遍历方式
获取每层数值时
进行数值判断
以及递增判断
0x02 解法
语言:Swift
树节点:TreeNode
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}
解法:
func isEvenOddTree(_ root: TreeNode?) -> Bool {
guard let root = root else { return false }
// 根节点为奇数
// 1, 奇数, 0, 偶数
var level: Int = 1
var queue: [TreeNode] = []
queue.append(root)
while !queue.isEmpty {
var temp: [TreeNode] = []
var arr: [Int] = []
// 判断每个值是否符合要求
// 收集下一层节点
for i in 0..<queue.count {
let node = queue[i]
if node.val % 2 != level {
return false
}
arr.append(node.val)
if let left = node.left {
temp.append(left)
}
if let right = node.right {
temp.append(right)
}
}
// 偶数层,是递减的,反转一下,改成递增
if level == 0 {
arr.reverse()
}
// 递增判断
for i in 1..<arr.count {
if arr[i-1] >= arr[i] {
return false
}
}
// 下一层
queue = temp
// 切换奇偶
level = (level == 1 ? 0 : 1)
}
return true
}
0x03 我的小作品
欢迎体验我的作品之一:小笔记-XNote
笔记好帮手
做笔记一步到位App Store 搜索即可~
边栏推荐
- 8年软件测试工程师感悟 —— 写给还在迷茫中的朋友
- 金仓数据库 KDTS 迁移工具使用指南(2. 简介)
- MySQL INTERVAL 关键字指南
- MySQL INTERVAL Keyword Guidelines
- FTP helper class for C#
- Can MySQL do two-way synchronization of multiple vps?
- 27英寸横置大屏+实体按键,全新探险者才是安全而合理的做法
- UI helper class for Winform - some components will use DevExpress components
- OneFlow源码解析:Op、Kernel与解释器
- Ant discloses the open source layout of core basic software technology for the first time
猜你喜欢
随机推荐
清华教授发文劝退读博:我见过太多博士生精神崩溃、心态失衡、身体垮掉、一事无成!...
MySQL加锁案例分析
moxa串口服务器配置说明(moxa串口驱动)
UI helper class for Winform - some components will use DevExpress components
金仓数据库KingbaseES安全指南--6.4. RADIUS身份验证
探讨if...else的替代方案
参观首钢园
05 Doris cluster construction
中国驻西班牙使馆再次提醒留学人员注意暑期安全
全新升级!《云原生架构白皮书 2022 版》重磅发布
27英寸横置大屏+实体按键,全新探险者才是安全而合理的做法
IronOS, an open source system for portable soldering irons, supports a variety of portable DC, QC, PD powered soldering irons, and supports all standard functions of smart soldering irons
DevExpress的GridControl帮助类
intentservice使用(Intention)
04 flink 集群搭建
HashCode technology insider interview must ask
金仓数据库 KDTS 迁移工具使用指南(2. 简介)
canvas粒子雨动画js特效
完全背包问题求组合数和排列数
A full review of mainstream timed task solutions









