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

递归:

class Solution:
    def process(self,left,right,nums):
        if left>right:
            return None
        mid=left+(right-left)//2
        midnode=TreeNode(nums[mid])
        midnode.left=self.process(left,mid-1,nums)
        midnode.right=self.process(mid+1,right,nums)
        return midnode

    def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
        return self.process(0,len(nums)-1,nums)

 迭代:

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
        if len(nums) == 0:
            return None
        root = TreeNode(0)
        rootque = [root]
        leftque = [0]
        rightque = [len(nums) - 1]
        while rootque:
            cur = rootque.pop(0)
            left = leftque.pop(0)
            right = rightque.pop(0)
            mid = left + (right - left) // 2
            cur.val = nums[mid]
            if left < mid:
                cur.left = TreeNode(0)
                rootque.append(cur.left)
                leftque.append(left)
                rightque.append(mid - 1)
            if right > mid:
                cur.right = TreeNode(0)
                rootque.append(cur.right)
                leftque.append(mid + 1)
                rightque.append(right)

        return root

 

posted @ 2024-02-19 13:00  Junior_bond  阅读(13)  评论(0)    收藏  举报