LeetCode 题目-108.将有序数组转换为二叉搜索树/110.平衡二叉树(python实现)

作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷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))

你可能感兴趣的:(Leetcode刷题笔记)