这段时间跟二叉树杠上了,接下来还有许多二叉树的题目,虽然已经做了不少了,大多题目都涉及到了递归,也挺好,刚好有机会练习一下递归,但是遇到新的题目还是有点力不从心,还需要看参考答案,真希望有一天像汤神一样:这道题我拿到手上就会做!
![472850ae9e5e839ef82279b080f97caf.png](https://img-blog.csdnimg.cn/img_convert/472850ae9e5e839ef82279b080f97caf.png)
第二十五天——第二十五题(平衡二叉树)
看题目!
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树[3,9,20,null,null,15,7]
3
/
9 20
/
15 7
返回true
。
示例 2:
给定二叉树[1,2,2,3,3,null,null,4,4]
1
/
2 2
/
3 3
/
4 4
返回 false
python解答之一:
# 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
return abs(self.height(root.right)-self.height(root.left))<2 and self.isBalanced(root.left) and self.isBalanced(root.right)
# 求高度
def height(self, node):
if not node:
return 0
return 1+max(self.height(node.right),self.height(node.left))
代码解释:
1.首先判断根节点为空时的情况(这一步已经习以为常了)
2.不为空则根据输入是否满足return后的条件来决定返回True或者False。
3.return后的条件为:
条件1:左右两侧的高度差小于2(也就是说高度差是1或者0都是可以的)
条件2:利用递归,去判断根节点左右两边的叶子结点他们的子节点是否满足条件1,以此往树下走,直到走到头。
4.条件1中用到了求二叉树高度的函数,所以在最后另外在定义一下height函数即可。