给定一棵二叉树,判断它是否为平衡二叉树。
平衡二叉树的定义是:如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
拿到二叉树的题目,一般的解题思路都可以先从左右子树递归求解。如果左子树不满足平衡或右子树不满足平衡,那么就判断它不是平衡的。
具体看代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isBalanced(self, root) :
def recur(root):
# 树为空,也是平衡二叉树
if not root:
return 0
# 查看左子树
left = recur(root.left)
# 左子树非平衡,直接返回非平衡的结论
if left == -1:
return -1
# 查看右子树
right = recur(root.right)
# 右子树非平衡,直接返回非平衡的结论
if right == -1:
return -1
# 如果左右子树均是平衡的,那么返回它们深度的最大值并加1
# 表示对应结点的深度
# 如果左右子树的深度相差大于1, 那么当前结点是非平衡的
# 总体来看,整棵树也是非平衡的
return max(left, right) + 1 if abs(left-right) <= 1 else -1
return recur(root) != -1
时间复杂度和空间复杂度均是O(N),因为要查看所有的结点。