Leetcode:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
思路:
对输入的二叉树进行后序遍历,对于每个遍历的节点计算其左子树右子树的深度;一旦有深度差大于1的情况下,直接返回False。否则持续遍历,并且return当前节点的最大深度。
代码:
# 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:
self.res = True
self.depth(root)
return self.res
def depth(self, root):
if not root:
return 0 # 没有子树,该子树深度就为0
# 后序遍历是关键
left_depth = self.depth(root.left)
right_depth = self.depth(root.right)
# 判断左右子树深度差
if abs(left_depth - right_depth) > 1: # abs求绝对值
self.res = False
print(max(left_depth, right_depth))
# 返回遍历的当前节点的最大深度
return max(left_depth, right_depth) + 1
网友评论