将有序数组转换为二叉搜索树

作者: _阿南_ | 来源:发表于2020-03-02 19:10 被阅读0次

题目:

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
      0
     / \
   -3   9
   /   /
 -10  5

题目的理解:

获取数组中间位置的值,创建一个节点,然后左边的数组再获取中间值创建一个节点,右边的数组也一样。

python实现

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        if nums is None or len(nums) <= 0:
            return None
        
        node, left, right = self.create_node(nums)
        self.recursion(node, left, right)
        
        return node

    def recursion(self, node: TreeNode, left_nums: List[int], right_nums: List[int]):
        if left_nums is not None and len(left_nums) > 0:
            left_node, left, right = self.create_node(left_nums)
            node.left = left_node
            
            self.recursion(left_node, left, right)

        if right_nums is not None and len(right_nums) > 0:
            right_node, left, right = self.create_node(right_nums)
            node.right = right_node
            
            self.recursion(right_node, left, right)
            
    def create_node(self, nums: List[int]) -> (TreeNode, List[int], List[int]):
        middle = int(len(nums) / 2)
        node = TreeNode(nums[middle])
        left = None
        right = None
        if middle > 0:
            left = nums[:middle]
        if middle + 1 < len(nums):
            right = nums[(middle + 1):]

        return node, left, right

提交

有点绕呢

// END 对python越来越熟练了,赞赞赞

相关文章

网友评论

    本文标题:将有序数组转换为二叉搜索树

    本文链接:https://www.haomeiwen.com/subject/tlybkhtx.html