0x00 题目
如果二叉树每个节点都具有相同的值
那么该二叉树就是 单值
二叉树
只有给定的树是单值二叉树时
才返回 true
;否则返回 false
0x01 思路
方法一:
使用 集合
存储,全部是相同元素,则数量为 1
空间复杂度: O(N)
方法二:
可以记录第 1
个数字,然后跟后面的比较
如果不相等,则返回 false
空间复杂度: O(1)
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 isUnivalTree(_ root: TreeNode?) -> Bool {
var set = Set<Int>()
func find(_ t: TreeNode?) {
guard let t = t else { return }
// 退出判断
if set.count > 1 { return }
// 添加
set.insert(t.val)
// 递归
find(t.left)
find(t.right)
}
find(root)
return set.count == 1
}
方法二:
func isUnivalTree(_ root: TreeNode?) -> Bool {
var val: Int = Int.min
var res: Bool = true
func find(_ t: TreeNode?) {
guard let t = t else { return }
// 已经为 false,直接退出
if res == false { return }
if val == Int.min {
val = t.val // 记录第一个数
}else{
res = (val == t.val) // 比较
}
// 是 false,退出
if res == false { return }
find(t.left)
find(t.right)
}
find(root)
return res
}
让笔记一步到位
小笔记