判断给定的二叉树是不是平衡二叉树
本文体中,高平衡二叉树定义为:二叉树中任意结点的左右子树深度差不超过1
Example 1:
Given the following tree
[3,9,20,null,null,15,7]
:3 / \ 9 20 / \ 15 7Return true.
Example 2:
Given the following tree
[1,2,2,3,3,null,null,4,4]
:1 / \ 2 2 / \ 3 3 / \ 4 4Return false.
1:递归,在计算二叉树每条路径深度的同时判断是否满足平衡二叉树的条件(在题”二叉树的最大深度https://mp.csdn.net/postedit/82381788“的解法基础上,对递归添加判断平衡二叉树)
class Solution(object):
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if not root:
return True
if self.depth(root)==-1: #因为False的特殊性(空、可以数字做加法),所以选择-1作为返回和判断条件
return False
else:
return True
def depth(self, root):
if not root:
return 0
left = self.depth(root.left)
if left==-1: #因为False的特殊性(空、可以数字做加法),所以选择-1作为返回和判断条件
return -1
right = self.depth(root.right)
if right==-1:
return -1
if left>right+1 or right>left+1: #因为False的特殊性(空、可以数字做加法),所以选择-1作为返回和判断条件
return -1
return max(left+1, right+1)
算法题来自:https://leetcode-cn.com/problems/balanced-binary-tree/description/