LeetCode 110. 平衡二叉树

题目链接:LeetCode 110. 平衡二叉树

题意:

给定一个二叉树,判断它是否是高度平衡的二叉树。

解题思路:

1.递归法:

对于递归法,既然是求树的高度,则应该使用后序遍历的方式,
对于每个节点,求左右子树的高度,比较左右子树的高度差是否小于1,如果不满足,返回false,如果满足,返回左右子树高度最大值 + 1

递归法代码:

func isBalanced(root *TreeNode) bool {
    h := getHeight(root)
    if h == -1 {
        return false
    }
    return true
}
// 返回以该节点为根节点的二叉树的高度,如果不是平衡二叉树了则返回-1
func getHeight(root *TreeNode) int {
    if root == nil {
        return 0
    }
    l, r := getHeight(root.Left), getHeight(root.Right)
    if l == -1 || r == -1 {
        return -1
    }
    if l - r > 1 || r - l > 1 {
        return -1
    }
    return max(l, r) + 1
}
func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

2.迭代法

迭代法比较难,这里就先跳过

posted @ 2023-05-16 16:17  小星code  阅读(15)  评论(0)    收藏  举报