📅  最后修改于: 2023-12-03 15:10:16.702000             🧑  作者: Mango
本题是关于基本的数据结构和算法的题目,要求考生实现一个根据二叉搜索树的先序遍历序列构建二叉搜索树的函数。这是一道较为典型的树的问题,考生需要熟练掌握二叉树的遍历、构建等基本操作。
给定一组二叉搜索树的先序遍历序列,编写一个算法构建该二叉搜索树。假设树中不存在重复元素。例如,如果给定序列 {10,5,1,7,40,50}
,则构建出来的搜索树如下图所示:
10
/ \
5 40
/ \ \
1 7 50
构建二叉搜索树的基本思路是:先确定根节点,然后递归构建左子树和右子数。根据节点之间的大小关系,可以确定左子树的所有节点都比右子树的节点小。
本题先序遍历序列的第一个值是根节点,可以将这个值插入到一个空树中,然后将剩下的点拆分成左右两个子序列,分别递归构建左右子树。
class TreeNode(object):
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def bstFromPreorder(preorder):
if len(preorder) == 0:
return None
root = TreeNode(preorder[0])
left_seq = [x for x in preorder if x < root.val]
right_seq = [x for x in preorder if x > root.val]
root.left = bstFromPreorder(left_seq)
root.right = bstFromPreorder(right_seq)
return root