难度:简单
一、题目描述:
二、解题分析:
1、剑指解析
I、自顶向下
II、自底向上
2、代码实现
I、自顶向下
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# Compute the tree's height via recursion
def height(self, root: TreeNode) -> int:
# An empty tree has height -1
if not root:
return -1
return 1 + max(self.height(root.left), self.height(root.right))
def isBalanced(self, root: TreeNode) -> bool:
# An empty tree satisfies the definition of a balanced tree
if not root:
return True
# Check if subtrees have height within 1. If they do, check if the
# subtrees are balanced
return abs(self.height(root.left) - self.height(root.right)) < 2 \
and self.isBalanced(root.left) \
and self.isBalanced(root.right)
II、自底向上
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# Return whether or not the tree at root is balanced while also returning
# the tree's height
def isBalancedHelper(self, root: TreeNode) -> (bool, int):
# An empty tree is balanced and has height -1
if not root:
return True, -1
# Check subtrees to see if they are balanced.
leftIsBalanced, leftHeight = self.isBalancedHelper(root.left)
if not leftIsBalanced:
return False, 0
rightIsBalanced, rightHeight = self.isBalancedHelper(root.right)
if not rightIsBalanced:
return False, 0
# If the subtrees are balanced, check if the current tree is balanced
# using their height
return (abs(leftHeight - rightHeight) < 2), 1 + max(leftHeight, rightHeight)
def isBalanced(self, root: TreeNode) -> bool:
return self.isBalancedHelper(root)[0]