二叉搜索树的中序遍历是一个递增的数组
根据中序遍历的结果可以建立一个二叉搜索树
代码:
/** * 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) { return con(nums,0,nums.size()-1); } TreeNode*con(vector<int>&nums,int begin,int end){ if(begin>end){return NULL;}//递归终止条件:左端大于右端 返回空 int mid=begin+(end-begin)/2; TreeNode*root=new TreeNode(); root->val=nums[mid]; root->left=con(nums,begin,mid-1); root->right=con(nums,mid+1,end); return root; } };
- 从定义我们知道,BST的中序遍历为一个递增序列,给定的数组其实就是中序遍历结果
- 取有序数组的中间值做根,左边部分做左树,右边部分做右树如此循环迭代去二分就可还原这棵BST树(此处引用别处)