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​​ 字根练习好帮手,后续还会有简码练习等~