![29f956af6ceed587b6625f597f449cfd.png](https://i-blog.csdnimg.cn/blog_migrate/442047d8177320433fb666a13c6b36b6.jpeg)
题目
先序遍历构造二叉树 - 力扣(LeetCode)leetcode-cn.com![4843095e070a612354615bfcdf44a1e4.png](https://i-blog.csdnimg.cn/blog_migrate/e2cb6637d33e8eb4bdda81bf254a3950.png)
返回与给定先序遍历 preorder 相匹配的二叉搜索树(binary search tree)的根结点。
(回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于 node.left 的任何后代,值总 < node.val,而 node.right 的任何后代,值总 > node.val。此外,先序遍历首先显示节点的值,然后遍历 node.left,接着遍历 node.right。)
示例:
输入:[8,5,1,7,10,12]
输出:[8,5,10,1,7,null,12]
![f491204c0bed5b418d573c83281fb8d5.png](https://i-blog.csdnimg.cn/blog_migrate/78257b7e5a71664d470787418700584e.jpeg)
提示:
1 <= preorder.length <= 100
- 先序
preorder
中的值是不同的。
解答
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def bstFromPreorder(self, preorder: List[int]) -> TreeNode:
root = TreeNode(preorder[0])
def structure_tree(node, val):
if not node:
return
if val < node.val:
if node.left:
structure_tree(node.left, val)
else:
node.left = TreeNode(val)
if val > node.val:
if node.right:
structure_tree(node.right, val)
else:
node.right = TreeNode(val)
for i in preorder[1:]:
structure_tree(root, i)
return root