我的思路:
因为只要有一个节点不是平衡节点,整棵树就不是,
因此
我们先设立一个标识符(初始化为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 __init__(self):
self.isbalence = True
def isBalanced(self, root: TreeNode) -> bool:
self.eachnode(root,0)
return self.isbalence
def eachnode(self,node,depth):
if node == None:
return 0
leftdepth = self.eachnode(node.left,depth)
if self.isbalence == False:
return 0
rightdepth = self.eachnode(node.right,depth)
if self.isbalence == False:
return 0
depth += 1
if abs(leftdepth-rightdepth) > 1:
self.isbalence = False
return 0
else:
return max(leftdepth,rightdepth) +depth
07.14更新
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.res_dict = {None:0}
def isBalanced(self, root: TreeNode) -> bool:
if root == None:
return True
self.func(root)
return self.func2(root)
def func(self,root):
if root == None:
return 0
if root in self.res_dict:
return self.res_dict[root]
else:
resl = self.func(root.left)
resr = self.func(root.right)
self.res_dict[root] = 1 + max(resl,resr)
return 1 + max(resl,resr)
def func2(self,root):
if root == None:
return True
if abs(self.res_dict[root.left] - self.res_dict[root.right]) <= 1:
return self.func2(root.left) and self.func2(root.right)
else:
return False