力扣题解:面试题 04.04. 检查平衡性

题目

实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。

解题思路

DFS

  • 计算当前节点的左右子树高度差
    • 若高度差 > 1,返回false
    • 若高度差 <= 1
      • 递归计算左子树
      • 递归计算右子树

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
  public boolean isBalanced(TreeNode root) {
    if (root == null) return true;
    if (Math.abs(height(root.left) - height(root.right)) > 1) return false;
    return isBalanced(root.left) && isBalanced(root.right);
  }

  private int height(TreeNode node) {
    if (node == null) return 0;
    return Math.max(height(node.left), height(node.right)) + 1;
  }
}

题目来源:力扣(LeetCode)

你可能感兴趣的:(算法,LeetCode,算法,leetcode题解,力扣题解,二叉树,DFS)