问题描述
我已经解决了这个问题,Convert Sorted Array。
起初 我不知道最后要返回什么,所以我在给定的函数内创建了另一个函数来进行递归
**case 1**
def sortedArrayToBST(self,nums: List[int]) -> TreeNode:
def bst(num_list):
# base_case
if len(nums) < 2:
return TreeNode(nums[-1])
# recursive_case
mid = len(nums) // 2
node = TreeNode(nums[mid])
node.left = bst(nums[:mid])
node.right = bst(nums[mid + 1:])
ans = bst(nums)
return ans
但是,结果一直给我“超过时间限制或递归的最大深度”。
然后,一旦我删除了内部的“ bts”函数,然后对给定函数(sortedArrayToBST)本身进行了相同的递归处理,错误就象魔术一样消失了。
**case 2**
def sortedArrayToBST(self,nums: List[int]) -> TreeNode:
if not nums:
return None
if len(nums) == 1:
return TreeNode(nums[-1])
# recursive_case
mid = len(nums) // 2
node = TreeNode(nums[mid])
node.left = self.sortedArrayToBST(nums[:mid])
node.right = self.sortedArrayToBST(nums[mid + 1:])
return node
但是,话虽如此,我看不出两个代码之间有什么区别。两者之间必须有一个关键的区别,但我自己无法解决。
请问一下案例1和案例2之间的区别是什么,那么是什么导致一个错误而不是另一个错误。
解决方法
在情况1中,经过处理的列表的长度不会在递归调用中减少,因为在bts
的参数为num_list
的同时,nums
也在其主体中被处理。如果在num_list
中处理了nums
(而不是bts
),错误将在情况1中消失。