二叉搜索树的中序遍历是一个递增的数组


根据中序遍历的结果可以建立一个二叉搜索树

代码:

/**
 * 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树(此处引用别处)