题目:
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
leetcode原题连接
思路:
递归(吐了
在【二叉树的深度】基础上进行代码修改
创建两个函数
函数depth:计算当前root节点的深度
函数isBalanced:判断是否平滑,即当前节点左子树深度与右子树深度之差 是否大于1,若大于则return False,反之,传入当前节点的左子树和右子树 继续递归。
存疑:
最后一行代码,若不加1,二叉树[1,2,2,3,3,null,null,4,4],会得到True,正确返回值应该是False
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
if root is None:#边界条件
return True
left_depth=self.depth(root.left)
right_depth=self.depth(root.right)
if abs(right_depth-left_depth)>1:
return False
else:
return self.isBalanced(root.left) and self.isBalanced(root.right)
def depth(self,root):
if root is None:
return 0
left_depth=self.depth(root.left)#当前节点左子树的深度
right_depth=self.depth(root.right)#当前节点右子树的深度
return max(left_depth+1,right_depth+1)#不加1会报错