我正在尝试制作一种算法,该算法可以在给定值列表的情况下创建完整的二叉搜索树。完成,因为除了最后一个级别,所有级别都已满,这需要将所有元素尽可能地向左移动。
我已经实现了一些(在 Python 中)将创建一个平衡的 BST,如下所示:
# TreeNode constructor takes (data, left, right, parent)
def make_tree(arr, parent):
if not arr:
return None
length = len(arr)
if length == 1:
return TreeNode(arr[0], None, None, parent)
else:
mid = int(len(arr)/2)
mid_node = TreeNode(arr[mid], None, None, parent)
mid_node.left = make_tree(arr[0:mid], mid_node)
mid_node.right = make_tree(arr[mid+1:length], mid_node)
return mid_node
它的工作原理是通过中点递归地拆分列表,并使中点成为父节点。
但是,这不会创建完整的BST。给定列表 [2,4,7,8,10],它将创建:
7
/ \
4 10
/ /
2 8
但是一个完整的 BST 应该是这样的:
8
/ \
4 10
/ \
2 7
您对如何修改我的方法来实现这一点有什么建议吗?