【二叉树】平衡二叉树

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
字根练习好帮手,后续还会有简码练习等~
请添加图片描述


Guess you like

Origin blog.csdn.net/xjh093/article/details/121806907