题目地址
https://leetcode-cn.com/problems/balanced-binary-tree/
题目描述
代码初步
- 思路:分别计算左右两边子树的高度,最后判断左右子数的高度差的绝对值是否不超过1。
- 问题:超时emmm(( ▼-▼ )
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if not root:
return True
leftBranch = 0
rightBranch = 0
# 计算左边分支的高度
leftStack = [root]
while leftStack:
for i in leftStack:
if i != None:
leftBranch = leftBranch + 1
leftStack.pop()
leftStack.append(i.left)
else:
break
# 计算右边分支的高度
rightStack = [root]
while rightStack:
for i in rightStack:
if i != None:
rightBranch = rightBranch + 1
rightStack.pop()
rightStack.append(i.right)
else:
break
# 如果左右两边的高度差大于1,则不是平衡二叉树
if (leftBranch - rightBranch) > 1 or (rightBranch - leftBranch) > 1:
return False
else:
return True
代码欣赏
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if not root:
return True
left_depth = self.get_depth(root.left)
right_depth = self.get_depth(root.right)
if abs(left_depth - right_depth) > 1:
return False
# 二叉树定义:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1
# 当左右子树的高度差小于1时,再往下每个节点判断下去
else:
return self.isBalanced(root.left) and self.isBalanced(root.right)
# 得到树的高度
def get_depth(self,root):
"""
:type root: TreeNode
:rtype: int
"""
if root is None:
return 0
else:
return max(self.get_depth(root.left),self.get_depth(root.right))+1