【发布时间】:2020-05-03 13:43:44
【问题描述】:
我目前正在阅读Cracking the code interview这本书,试图在编码方面达到一个下降的水平(虽然我还差得很远)。
问题如下: 给定一个具有唯一整数元素的排序(递增顺序)数组,写一个 创建具有最小高度的二叉搜索树的算法。
这是我的尝试。
class Node:
def __init__(self,value):
self.value = value
self.left = None
self.right = None
class binaryTree:
def __init__(self,nodes,root):
self.nodes = nodes
self.root = root
def minimalTree(sortedArray):
if not sortedArray:
return None
else:
lengthArray = len(sortedArray)
middle = lengthArray//2
print("middle = ", middle)
root = Node(sortedArray[middle])
leftArray = array.array('i',[])
rightArray = array.array('i',[])
if middle == 0:
return root
if middle > 0:
leftArray = sortedArray[0:middle]
root.left = Node(leftArray[len(leftArray)//2])
if middle + 1 < lengthArray:
rightArray = sortedArray[middle+1:lengthArray]
root.right = Node(leftArray[len(rightArray)//2])
return minimalTree(leftArray),minimalTree(rightArray)
如您所见,我并没有真正使用 binaryTree 类,但我不确定它是否有用,因为树可以由它的根给出。
我仍然在递归算法上苦苦挣扎,我不明白为什么这个算法不返回任何东西。
请注意,我的问题不是关于我提出的算法的正确性或效率(尽管这方面的 cmets 也很受欢迎)。
编辑:我已经编辑了代码,试图按照建议包含基本情况。
【问题讨论】:
-
确保你正在为你认为你正在准备的东西做准备。根据公司的类型,这可能是一个非常常见的面试问题......或者一个非常不常见的问题。
-
目前我对问题的类型不太感兴趣,而对能够实现这样或那样的算法更感兴趣。由于 CTCI 非常基础,我相信从算法的角度来看,我更关心的是代码本身。
-
还不错,态度很好。
-
基本情况在哪里?当两个条件都为 False 时会发生什么?放入一些打印功能,看看发生了什么。
-
@wwii 我已尝试将其包含在内。仍然为遇到的每个根的孩子返回“无”。
标签: python recursion binary-search-tree