剑指 Offer 55 - II. 平衡二叉树

发布时间 2023-09-09 16:11:52作者: 小星code

题目链接: 剑指 Offer 55 - II. 平衡二叉树

题目描述:

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

解法思路:

  • 求出二叉树中每个节点的左右子树的高度(利用上一题的代码)
  • 判断左右子树的高度差是否超过1,从而得出结果

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
var res bool
func isBalanced(root *TreeNode) bool {
    res = true
    if root == nil {
        return true
    }  
    deep(root)
    return res
}
func deep(root *TreeNode)int{
    if root == nil {
        return 0
    }
    l := deep(root.Left)
    r := deep(root.Right)
    if (l - r) > 1 || (r - l) > 1 {
        res = false
    }
    return max(l,r) + 1
}
func max(a,b int)int{
    if a > b {
        return a
    }
    return b
}

闭包的形式,简化代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

func isBalanced(root *TreeNode) bool {
    res := true
    var deep func(*TreeNode)int
    if root == nil {
        return true
    }
    deep = func(root *TreeNode)int{
        if root == nil {
            return 0
        }
        l := deep(root.Left)
        r := deep(root.Right)
        if (l - r) > 1 || (r - l) > 1 {
            res = false
        }
        return max(l,r) + 1
    }
    deep(root)  
    return res
}
func max(a,b int)int{
    if a > b {
        return a
    }
    return b
}