26平衡二叉树

2020-08-10  本文已影响0人  Jachin111

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

示例 1:
给定二叉树 [3,9,20,null,null,15,7]
  3
  / \
9   20
      / \
    15 7
返回 true 。

示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]

      1
      / \
    2  2
    / \
  3   3
  / \
4   4
返回 false 。

从底至顶(提前阻断)

class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        return self.recur(root) != -1

    def recur(self, root):
        if not root: return 0
        left = self.recur(root.left)
        if left == -1: return -1
        right = self.recur(root.right)
        if right == -1: return -1
        return max(left, right) + 1 if abs(left - right) < 2 else -1

从顶至底(暴力法)

class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        if not root: return True
        return abs(self.depth(root.left) - self.depth(root.right)) <= 1 and \
            self.isBalanced(root.left) and self.isBalanced(root.right)

    def depth(self, root):
        if not root: return 0
        return max(self.depth(root.left), self.depth(root.right)) + 1

来源:力扣(LeetCode)

上一篇下一篇

猜你喜欢

热点阅读