第108题:
"
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
"
题目大意:给你一个按照升序排序的数组,你将它转换为平衡二叉树。
解题思路:首先明确平衡二叉树的定义:
(1)它是一棵二叉排序树,即根节点的值大于左子树节点的值,小于右子树节点的值。
(2)除了性质1之外,还要求每棵树的左右子树的深度之差不能超过1
其实说白了,要满足条件(2),我们只是需要将已经排序好的数组进行二分即可,这样既能满足条件(1)也能满足条件(2),个人在做试题的时候,主要到考察到树的部分的时候,一定要多往递归方向去做。
下面就直接给出代码了:
class Solution:
def sortedArrayToBST(self, nums: list(int)) -> TreeNode:
if nums is None or len(nums)==0:
return None
return self.fun(nums,0,len(nums)-1)
def fun(self,nums,min,max)->TreeNode:
if min>max:
return None
mid=(min+max)//2
node=TreeNode(nums[mid])
node.left=self.fun(nums,min,mid-1)
node.right=self.fun(nums,mid+1,max)
return node
第110题:
"
Given a binary tree, determine if it is height-balanced.
"
题目大意:给出一棵二叉树,判断它是不是平衡二叉树
题目链接
解题思路:关于平衡二叉树,就不继续说了,可以参考上面的内容,但是这题没有第一个要求,只是需要判断它是不是高度平衡的,只需要满足条件(2)即可,本题主要是得到树的高度的计算,也就是可以直接计算树的高度:采用递归的思想,先计算左子树的高度,再计算右子树的高度,相比取最大的数,然后加上1(根节点是第一层)
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
import math
if not root:
return True
else:
left_height=self.height(root.left)
right_height=self.height(root.right)
if math.fabs(left_height-right_height)>1:
return False
else:
return self.isBalanced(root.left) and self.isBalanced(root.right)
def height(self, root:TreeNode)->int:
if not root:
return 0
left_height=self.height(root.left)
right_height=self.height(root.right)
if left_height>right_height:
return left_height+1
else:
return right_height+1