将有序数组转换为二叉搜索树 2020/7/3

首先要清楚什么是二叉搜索树,数据结构课上讲过,就是父节点大于左节点小于右节点的二叉树,二叉搜索树的性质就是中序遍历后得到的数组为升序数组。

具体的构建思路采用递归分分治的方法构造,根节点一定是中间的节点,确定好根节点后,根节点左边的为左儿子节点,右边的为右儿子节点。

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;
    }
};
原文地址:https://www.cnblogs.com/Accepting/p/13229100.html