题目描述:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
参考解答:
Leetcode 110:平衡二叉树(最详细的解法!!!)_coordinate_blog的博客-CSDN博客_110. 平衡二叉树https://blog.csdn.net/qq_17550379/article/details/82081501?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165098175116780366531503%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165098175116780366531503&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-82081501-null-null-2~all~sobaiduend~default-1-82081501.142^v9^control,157^v4^control&utm_term=%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91leetcode&spm=1018.2226.3001.4187
递归求解思路:
如果根节点为空,为平衡二叉树;
根节点非空,那么就要递归的判断它的左右子树的高度是否只相差一。
计算高度时需要函数height,与求树的深度思路相仿。
算法练习——二叉树的最大深度 leetcode.104 python_唐楚江之歌的博客-CSDN博客https://blog.csdn.net/tangchujiang/article/details/124437025?spm=1001.2014.3001.5502代码实现:
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):
if not root:
return True
def height(node):
if not node:
return 1 # 只要返回值不是-1 都是一颗平衡二叉树
len1 = height(node.left)
len2 = height(node.right)
if abs(len1-len2) > 1 or len1 == -1 or len2 == -1:
return -1 # 如果已经不满足了 就将这棵树设为-1 避免重复运算
return max(len1,len2)+1 # 计算高度
return height(root) != -1