LeetCode 30 days Challenge - Day 20
本系列将对LeetCode新推出的30天算法挑战进行总结记录,旨在记录学习成果、方便未来查阅,同时望为广大网友提供帮助。
Construct Binary Search Tree from Preorder Traversal
Return the root node of a binary search tree that matches the given preorder
traversal.
(Recall that a binary search tree is a binary tree where for every node, any descendant of node.left
has a value <
node.val
, and any descendant of node.right
has a value >
node.val
. Also recall that a preorder traversal displays the value of the node
first, then traverses node.left
, then traverses node.right
.)
Example 1:
1 | Input: [8,5,1,7,10,12] |
Note:
1 <= preorder.length <= 100
- The values of
preorder
are distinct.
Solution
题目要求分析:给定一个二叉搜索树的前序遍历序列,要求还原该二叉树。
解法:
本题只要了解:
- 二叉搜索树的特性:
- 对任意结点,其结点值永远满足(如果存在):
左儿子 < 根 < 右儿子
; - 由此推出,
左子树任意值 < 根 < 右子树任意值
;
- 对任意结点,其结点值永远满足(如果存在):
- 前序遍历:
根 -> 左 -> 右
顺序进行遍历。
由此,总结还原的思想是:
- 对当前序列,第一个值是根结点,剩余序列中,比第一个值小的是左子树,剩余为右子树。
- 递归操作即可,当序列只有一个元素时,直接返回。
1 | TreeNode* build(vector<int>& preorder, int l, int r) { |
传送门:Construct Binary Search Tree from Preorder Traversal
Karl