108. Convert Sorted Array to Binary Search Tree

来源:互联网 发布:鼎盈人工智能 编辑:程序博客网 时间:2024/06/05 11:22

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

我的解答:


/** * 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) {       TreeNode* root = __sortedArrayToBST(nums, 0, nums.size() - 1);        return root;    }    TreeNode* __sortedArrayToBST(vector<int>& nums, int left, int right){        if(left <= right){            TreeNode* root = new TreeNode(nums[(left + right) / 2]);            root->left = __sortedArrayToBST(nums, left, (left + right) / 2 - 1);            root->right = __sortedArrayToBST(nums, (left + right) / 2 + 1, right);            return root;        }else{            return nullptr;        }    }};

更简洁的方式:
class Solution {public:    TreeNode *sortedArrayToBST(vector<int> &num) {        if(num.size() == 0) return NULL;        if(num.size() == 1)        {            return new TreeNode(num[0]);        }                int middle = num.size()/2;        TreeNode* root = new TreeNode(num[middle]);                vector<int> leftInts(num.begin(), num.begin()+middle);        vector<int> rightInts(num.begin()+middle+1, num.end());                root->left = sortedArrayToBST(leftInts);        root->right = sortedArrayToBST(rightInts);                return root;    }};


原创粉丝点击