Leetcode 108 平衡二叉搜索树

为了以后能够找个工作苟活下去,最近开始刷Leetcode了。。。惨,还TMD要用Python,感觉刷题没有C++好用。。虽然以前搞过竞赛吧(划水的那种),但是毕竟不是科班出身,数据结构基础简直薄弱。说实话,今天第一次听说平衡二叉搜索树的概念(竞赛很少有二叉树的题就没怎么看过。。)。

Leetcode链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/description/

所谓的二叉搜索树,有以下三个条件:

1、左边节点不为空的话,数值小于根节点数值

2、右边节点不为空的话,数值大于根节点数值

3、左右子树也是二叉搜索树

而平衡二叉搜索树则是在二叉搜索树的基础上增加了二个条件:

1、左子树和右子树的深度差小于等于1

2、左右子树均为平衡二叉树

题目中给了一个排了序的列表,让我们建立一个平衡二叉搜索树,由于返回的是一个列表,所以,还得做一次遍历。有排好序的列表,建立一个平衡树简直简单,思路很简单:取中值为根节点,剩下的左边列表作为左子树,右边列表作为右子树(正好满足了搜索树的条件1,2),然后通过递归的方式即可生成平衡二叉搜索树(感觉二叉树问题递归无敌。。)。遍历我用了队列的方式,读一个节点,把它出队,把它左右节点压入待搜索队列(不一定最好,瞎写的感觉很low)。

上个代码:

#encoding=utf-8
import numpy as np

# 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 createTree(self, nums):
        if nums == []:
            return None
        n = len(nums)
        root = TreeNode(nums[n / 2])
        root.left = self.createTree(nums[0 : n/2])
        # print root.left.val
        root.right = self.createTree(nums[n/2+1 : n])
        # print root.left.val
        return root

    def searchTree(self, root):
        if root == None:
            return []
        Queue = [root]
        ans = [root.val]
        top = 0
        i = 0
        while i <= top:
            if Queue[i] == None:
                i += 1
                continue
            Queue.append(Queue[i].left)
            Queue.append(Queue[i].right)
            if Queue[i].left == None:
                ans.append(None)
            else:
                ans.append(Queue[i].left.val)
            if Queue[i].right == None:
                ans.append(None)
            else:
                ans.append(Queue[i].right.val)
            i += 1
            top += 2
        n = len(ans)
        while ans[n-1] == None:
            n -= 1
        return ans[0:n]

    def sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        root = self.createTree(nums)
        return self.searchTree(root)


# s = Solution()
# print s.sortedArrayToBST([-10,-3,0,5,9])

猜你喜欢

转载自blog.csdn.net/ZouCharming/article/details/81637145