📜  数据结构|二叉树|问题15(1)

📅  最后修改于: 2023-12-03 15:40:00.966000             🧑  作者: Mango

数据结构 | 二叉树 | 问题15

问题描述

给定一个二叉树,判断它是否是高度平衡的二叉树。在本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过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,同时每个节点的子树也需要满足这个条件。因此需要使用递归的方式来遍历整棵树,计算每个节点的左右两个子树高度差的绝对值,再判断是否小于等于1。具体实现可以分为两个步骤:

  1. 递归计算每个节点的高度,同时计算左右子树的高度差
  2. 判断每个节点的左右子树是否都是平衡二叉树
代码
class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        def dfs(root):
            if not root:
                return 0, True
            l_height, l_balanced = dfs(root.left)
            r_height, r_balanced = dfs(root.right)
            return max(l_height, r_height) + 1, l_balanced and r_balanced and abs(l_height - r_height) <= 1

        _, balanced = dfs(root)
        return balanced
时间复杂度

递归处理每个节点,因此时间复杂度为 O(n),其中 n 为节点数。