力扣算法 - 平衡二叉树

140 阅读1分钟

平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

示例 1:

给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7

返回 true 。

示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]

       1
      / \
     2   2
    / \
   3   3
  / \
 4   4

返回 false 。

思路:

1.从上往下利用递归思想 2.计算左右子树高度 3,当左右子树高速差 <= 1 时候, 该树是平衡的

Java实现
    public boolean isBalanced(TreeNode root) {
        if (root == null) return true;
        return (Math.abs(height(root.left) - height(root.right)) <= 1) && isBalanced(root.left) && isBalanced(root.right);
    }

    public int height(TreeNode node) {
        if (node == null) return 0;
        return Math.max(height(node.left), height(node.right)) + 1;
    }
Swift实现
    func isBalanced(_ root: TreeNode?) -> Bool {
        if root == nil {
            return true
        }
        
        return (abs(height(root?.left) - height(root?.right)) <= 1) &&
               isBalanced(root?.left) &&
               isBalanced(root?.right)
    }
    
    func height(_ node: TreeNode?) -> Int {
        if node == nil {
            return 0;
        }
        return max(height(node?.left), height(node?.right)) + 1
    }