1008.Construct Binary Search Tree from Preorder Traversal

1008.Construct Binary Search Tree from Preorder Traversal

难度:Medium

返回与给定先序遍历 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]

1266.png

提示:

1 <= preorder.length <= 100 先序 preorder 中的值是不同的。

先序遍历,先遍历根节点和左孩子,然后到底之后再遍历右边的。不断回溯。 所以当下一个节点比当前节点小时,直接添加左孩子即可。 当其比较大时,不断回溯比较,找到大于该节点的根节点,然后从其左子树开始比较,如果不存在右孩子,则将其添加为右孩子。如果有,则比较其右孩子的右孩子(左边之前已经遍历过了),不断循环,最后将其添加为右孩子即可。 代码实现如下:

执行用时 :4 ms, 在所有 C++ 提交中击败了96.01%的用户 内存消耗 :9 MB, 在所有 C++ 提交中击败了87.58%的用户

Last updated

Was this helpful?