判断平衡二叉树——Python

给定一棵二叉树,判断它是否为平衡二叉树。

平衡二叉树的定义是:如果某二叉树中任意节点的左右子树的深度相差不超过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),因为要查看所有的结点。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容