【leetcode-python-34】面试题 04.04. 检查平衡性
参考大佬版1(5.46%)
用check_height函数返回子树高度。在主函数中判断高度差,若相差大于1,则返回False。如果左右子树高度差相差小于等于1,则再看左右子树是否同时为平衡树。
注:参考题解区疾风知劲草思路。
class Solution(object):
def isBalanced(self, root):
if root is None:
return True
if abs(self.check_height(root.left) - self.check_height(root.right))>1:
return False
return self.isBalanced(root.left) and self.isBalanced(root.right)
def check_height(self,root):
if not root:
return 0
height = max(self.check_height(root.left), self.check_height(root.right))
return height+1
参考大佬版2(78.15%)
先初始化设置一个flag,其中用isb函数进行迭代,返回高度。且在函数中判断高度差来改变flag的值。主要的函数只需要返回flag的状态。
注:参考题解区腐烂的橘子🍊思路。
class Solution(object):
def __init__(self):
self.flag = True
def isb(self, root):
if not root:
return 0
l = self.isb(root.left) + 1
r = self.isb(root.right) + 1
if abs(l-r)>1:
self.flag = False
return max(l,r)
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
self.isb(root)
return self.flag
如果将函数写在里面是64.71%。
class Solution(object):
def __init__(self):
self.flag = True
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
def isb(root):
if not root:
return 0
l = isb(root.left) + 1
r = isb(root.right) + 1
if abs(l-r)>1:
self.flag = False
return max(l,r)
isb(root)
return self.flag
新手入坑,多多包涵~~