标签:
题目描述:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
即给定一个升序排列的数组,现在将它转换成一个平衡二叉树。
数组排好序,相当于我们最后生成的平衡二叉树,其根节点为数组中间节点,左子树的根节点为前半部分的中间节点,右子树的根节点为后半部分的中间节点,相当于一个二分查找,找到一部分的中间节点就插入,缩短搜索区域,直到此区域中只有一个节点为止。
递归代码如下:
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
if(nums.size()==0) return NULL;
int mid=nums.size()/2;
TreeNode* root=(TreeNode*) malloc(sizeof(TreeNode));
root->val=nums[mid];
if(nums.size()==1)
{
root->left=NULL;
root->right=NULL;
return root;
}
vector<int> leftnum(nums.begin(),nums.begin()+mid);
vector<int> rightnum(nums.begin()+mid+1,nums.end());
root->left=sortedArrayToBST(leftnum);
root->right=sortedArrayToBST(rightnum);
return root;
}
};利用两个数组,只采用一个函数的方法:
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
if(nums.size()==0) return NULL;
int mid=nums.size()/2;
TreeNode* root=(TreeNode*) malloc(sizeof(TreeNode));
root->val=nums[mid];
if(nums.size()==1)
{
root->left=NULL;
root->right=NULL;
return root;
}
vector<int> leftnum(nums.begin(),nums.begin()+mid);
vector<int> rightnum(nums.begin()+mid+1,nums.end());
root->left=sortedArrayToBST(leftnum);
root->right=sortedArrayToBST(rightnum);
return root;
}
};
leetcode-Convert Sorted Array to Binary Search Tree
标签:
原文地址:http://blog.csdn.net/sinat_24520925/article/details/45727475