leetcode 平衡二叉树

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

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:
image

输入:root = [3,9,20,null,null,15,7]
输出:true
示例 2:
image

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false
示例 3:

输入:root = []
输出:true

解题思路

  1. 检查左子树的高度
  2. 检查右子树的高度
  3. 判断左右子树的高度差是否小于等于1
  4. 如果是,利用递归思想,继续检查左子节点和右子节点是否满足上述条件
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
        if (root == null) {
            return true;
        }

        int leftDepth = depth(root.left);
        int rightDepth = depth(root.right);
        int distance = leftDepth > rightDepth ? leftDepth - rightDepth : rightDepth - leftDepth;
        if (distance <= 1) {
            return isBalanced(root.left) && isBalanced(root.right);
        } else {
            return false;
        }
    }

    private int depth(TreeNode node) {
        int tdepth = 0;

        if (node == null) {
            return tdepth;
        }

        tdepth += 1;
        int leftDepth = depth(node.left);
        int rightDepth = depth(node.right);
        int max = leftDepth > rightDepth ? leftDepth : rightDepth;
        return max+tdepth;
    }
}
posted @ 2023-09-17 11:24  明月照江江  阅读(10)  评论(0编辑  收藏  举报