【二叉树】平衡二叉树
原创
©著作权归作者所有:来自51CTO博客作者haocold的原创作品,请联系作者获取转载授权,否则将追究法律责任
0x00 题目
给你一个二叉树
判断它是否是高度平衡的二叉树
一棵高度平衡二叉树定义为:
一个二叉树 每个
节点的 左右
两个子树的
高度差的绝对值不超过 1
0x01 思路
高度差的绝对值不超过 1
就需要计算 每个
节点左右子树的高度
保证所有子树的高度差不超过 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 isBalanced(_ root: TreeNode?) -> Bool {
// 节点为空,高度差为 0
if root == nil { return true }
// 当前节点的左右子树高度差,是否不超过1
let flag = abs(treeHeight(root!.left) - treeHeight(root!.right)) < 2
// 左子树,是否平衡
let left = isBalanced(root!.left)
// 右子树,是否平衡
let right = isBalanced(root!.right)
// 都满足时,则为 高度平衡的二叉树
return flag && left && right
}
// 计算节点的高度
func treeHeight(_ root: TreeNode?) -> Int {
// 节点为空,高度为 0
if root == nil { return 0 }
// 左子树高度
let left = treeHeight(root!.left)
// 右子树高度
let right = treeHeight(root!.right)
// 当前节点的最大高度,+1 是节点自己
let h = max(left, right) + 1
return h
}
小程序
小五笔:XWubi
字根练习好帮手,后续还会有简码练习等~