这段时间跟二叉树杠上了,接下来还有许多二叉树的题目,虽然已经做了不少了,大多题目都涉及到了递归,也挺好,刚好有机会练习一下递归,但是遇到新的题目还是有点力不从心,还需要看参考答案,真希望有一天像汤神一样:这道题我拿到手上就会做!
第二十五天——第二十五题(平衡二叉树)
看题目!
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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 = Noneclass Solution(object):def isBalanced(self, root):""":type root: TreeNode:rtype: bool"""if not root:return Truereturn 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 0return 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函数即可。