题目描述
给定一颗二叉树,判断它是不是高度平衡的二叉树。一颗高度平衡二叉树定义为:一个二叉树的每个节点的左右子树的高度差的绝对值不超过1。
示例1
给定二叉树[3,9,20,null,null,15,7],返回True
给定二叉树[1,2,2,3,3,null,null,4,4],返回False
代码实现
定义树节点
class TreeNode:
def __init__(self,x):
self.val = x
self.left = None
self.right = None
重构二叉树
def buildTree(nums , i):
if i >= len(nums) or nums[i] == 'null':
return None
root = TreeNode(nums[i])
root.left = buildTree(nums , 2*i+1)
root.right = buildTree(nums , 2*i+1)
return root
class Solution:
def isBalanced(self,root: TreeNode) -> bool:
if not root:
return True
index1 = abs(self.tree_depth(root.left) - self.tree_depth(root.right)) <= 1
index2 = self.isBalanced(root.left)
index3 = self.isBalanced(root.right)
return index1 and index2 and index3
def tree_depth(self,node) -> int:
left_depth = float("-inf")
right_depth = float("-inf")
if not node:
return 0
if not (node.left or node.right):
return 1
if node.left:
left_depth = max(self.tree_depth(node.left),left_depth)
if node.right:
right_depth = max(self.tree_depth(node.right),right_depth)
return max(left_depth , right_depth) + 1
京公网安备 11010502036488号