美文网首页
LeetCode 110. 平衡二叉树

LeetCode 110. 平衡二叉树

作者: 草莓桃子酪酪 | 来源:发表于2022-07-27 06:08 被阅读0次
题目

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

例:
输入:root = [3,9,20,null,null,15,7]
输出:true

方法:递归

判断每个节点左右子树的高度的差值是否大于 1,那么应使用后序遍历
求节点的高度部分:

  • 首先判断节点是否为空
  • 计算该节点的左右子树的高度
  • 若左子树或右子树的高度为 -1,那么表示之前已经得知该二叉树不平衡,继续返回 -1 即可
  • 若左右子树的高度差大于 1,此时以中间节点为根节点的二叉树不为平衡二叉树,那么二叉树不为平衡二叉树,返回 -1;若左右子树的高度差小于等于 1,那么返回该中间节点的高度
    判断是否平衡部分:
  • 若高度为 -1,则表示不为平衡二叉树
  • 若高度为其他值,则表示为平衡二叉树
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def isBalanced(self, root):
        if self.height(root) != -1:
            return True
        else:
            return False

    def height(self, node):
        if node == None:
            return 0
        left = self.height(node.left)
        right = self.height(node.right)
        if left == -1 or right == -1:
            return -1
        if abs(left - right) > 1:
            return -1
        else:
            return 1 + max(left, right)

相关文章

网友评论

      本文标题:LeetCode 110. 平衡二叉树

      本文链接:https://www.haomeiwen.com/subject/dlfmprtx.html