1008. 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:
Input: [8,5,1,7,10,12] Output: [8,5,10,1,7,null,12]
Note:
1 <= preorder.length <= 100
- The values of
preorder
are distinct.
根据二叉搜索树的先序遍历结果,构造该二叉搜索树。
简单题。先序遍历是根、左、右,又因为是二叉搜索树,所以左<根<右,所以数组中第一个元素是根节点,然后找到数组右边第一个大于根节点的树,把数组划分为左子树和右子树,然后递归构造。
完整代码如下:
class Solution {
public:
TreeNode* Work(vector<int> &preorder, int l, int r) {
if (l > r)return NULL;
if (l == r)return new TreeNode(preorder[l]);
TreeNode *root = new TreeNode(preorder[l]);
int mid = -1;
for (int i = l; i <= r; ++i) {
if (preorder[i] > root->val) {
mid = i;
break;
}
}
if (mid == -1)root->left = Work(preorder, l + 1, r);
else {
root->left = Work(preorder, l + 1, mid - 1);
root->right = Work(preorder, mid, r);
}
return root;
}
TreeNode* bstFromPreorder(vector<int>& preorder) {
return Work(preorder, 0, preorder.size() - 1);
}
};
本代码提交AC,用时8MS。