首先要清楚什么是二叉搜索树,数据结构课上讲过,就是父节点大于左节点小于右节点的二叉树,二叉搜索树的性质就是中序遍历后得到的数组为升序数组。
具体的构建思路采用递归分分治的方法构造,根节点一定是中间的节点,确定好根节点后,根节点左边的为左儿子节点,右边的为右儿子节点。
code:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* sortedArrayToBST(vector<int>& nums) { int n=nums.size(); if(n==0) return NULL; vector<int> left; vector<int> right; for(int i=0;i<n/2;i++) left.push_back(nums[i]); TreeNode *p=new TreeNode(nums[n/2]); for(int i=n/2+1;i<n;i++){ right.push_back(nums[i]); } p->left=sortedArrayToBST(left); p->right=sortedArrayToBST(right); return p; } };