1008. 前序遍历构造二叉搜索树
1008. 前序遍历构造二叉搜索树
给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并返回其根。
保证 对于给定的测试用例,总是有可能找到具有给定需求的二叉搜索树。
二叉搜索树 是一棵二叉树,其中每个节点, Node.left 的任何后代的值 严格小于 Node.val , Node.right 的任何后代的值 严格大于 Node.val。
二叉树的 前序遍历 首先显示节点的值,然后遍历Node.left,最后遍历Node.right。
示例 1:

输入:preorder = [8,5,1,7,10,12] 输出:[8,5,10,1,7,null,12]
示例 2:
输入: preorder = [1,3] 输出: [1,null,3]
提示:
1 <= preorder.length <= 1001 <= preorder[i] <= 10^8preorder中的值 互不相同
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 void insertNode(TreeNode *root, int val) { 15 if (root->val > val) { // 节点插入到左子树 16 if (root->left == nullptr ) { 17 // 左子树为空直接插入节点 18 root->left = new TreeNode(val); 19 } else { 20 insertNode(root->left, val); 21 } 22 } else { // 节点插入到右子树 23 if (root->right == nullptr) { 24 root->right = new TreeNode(val); 25 } else { 26 insertNode(root->right, val); 27 } 28 } 29 return; 30 } 31 TreeNode* bstFromPreorder(vector<int>& preorder) { 32 if (preorder.empty()) { 33 return nullptr; 34 } 35 TreeNode *root = new TreeNode(preorder[0]); 36 for (unsigned int i = 1; i < preorder.size(); i++) { 37 insertNode(root, preorder[i]); // 递归插入节点 38 } 39 return root; 40 } 41 };
浙公网安备 33010602011771号