作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢?
108.将有序数组转换为二叉搜索树
- 题目要求
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1
- 例如
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
- 分析
方法:首先要明白什么是二叉搜索树(它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树),还要明白什么是平衡二叉树(题目其实已经给了:任意左右两棵树的高度差不超过1)
所以我门可以通过递归不断构建结点的左右子树
class Solution(object):
def sortedArrayToBST(self, nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
if not nums:
return None
else:
mid=len(nums)//2
tn=TreeNode(nums[mid])
min_nums=nums[:mid]
max_nums=nums[mid+1:]
tn.left=self.sortedArrayToBST(min_nums)
tn.right=self.sortedArrayToBST(max_nums)
return tn
110.平衡二叉树
- 题目要求
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
- 例如
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false 。
- 分析
方法:使用递归返回树的所有子树的高度差,一旦大于0就直接返回
class Solution(object):
def isBalanced(self, root):
if root is None:
return True
return abs(self.judege_length(root.left)-self.judege_length(root.right))<2 and self.isBalanced(root.left) and self.isBalanced(root.right)
def judege_length(self,root):
if root is None:
return 0
return 1+max(self.judege_length(root.left),self.judege_length(root.right))