平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:true
示例 2:
输入:root = [1,2,2,3,3,null,null,4,4]
输出:false
示例 3:
输入:root = []
输出:true
思路:
根据题意,要是平衡二叉树,每一个节点的左右子树的深度差不能超过1。因此如果我们用递归来解决的话,对于当前节点,我们得到它左右子树的深度后进行判断,如果当前节点的左右子树深度差合法,那么就继续递归它的左节点和右节点。
那么如何获得左右子树的深度呢?也还是用递归解决,我们做过求二叉树深度的那一题,一个两行的递归函数就可以搞定。
代码:
class Solution(object):
def isBalanced(self, root):
def depth(root):#获取二叉树的深度
if not root:return 0
return max(depth(root.left),depth(root.right))+1
def is_avl(root):
if not root:return True#如果遍历到底,则返回True
#如果左右高度差小于1
if depth(root.left)-depth(root.right)<-1 or depth(root.left)-depth(root.right)>1:
return False#则不满足条件 返回False
else:#当前节点满足了,继续递归到它的左右子节点
return (is_avl(root.left) and is_avl(root.right))
return is_avl(root)
小结:
从递归最外层来看,对于根节点root,如果它自己的左右子树深度差不超过1,且它的左右子节点各自也满足这个条件,那么这棵树就是一个平衡二叉树,不需要跳进递归里去。
这个解法里有两个递归(求深度也用了递归),所以效率并不高。只不过它符合最传统的递归解决方式,只要按照之前做二叉树的思路部就班地写出递归函数来就可以解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了