110. 平衡二叉树
原始题目链接:https://leetcode-cn.com/problems/balanced-binary-tree/
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
解题思路:
用一个工具函数来计算子树的高度,这道题需要处理递归的返回值,因为需要计算高度,所以递归函数需要用一个变量接受返回的参数。计算好子树的高度,然后判断是否满足平衡二叉树的定义,即高度差不大于1,然后在递归的调用根节点的左子树和右子树,看是否满足平衡二叉树的定义。
代码实现:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
# 定义一个工具函数:计算子树的高度
# 参数是,子树的根节点和自述的高度
def calc_hight(node, h):
if not node:
return 0
l = calc_hight(node.left, h + 1)
r = calc_hight(node.right, h + 1)
return max(l, r) + 1
if not root:
return True
# 检验左右子树的高度差是否满足平衡二叉树的要求
if abs(calc_hight(root.left, 0) - calc_hight(root.right, 0)) > 1:
return False
# 递归的查看root的左右子树是否满足平衡二叉树的要求
return self.isBalanced(root.left) and self.isBalanced(root.right)
参考文献:
https://leetcode-cn.com/problems/balance-a-binary-search-tree/solution/ping-heng-er-cha-shu-zhuan-ti-by-fe-lucifer-4/