Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
题目解析:
1、因为是要高度平衡的二叉树。
2、因此我们使用递归的方法,将数组的中间值作为根节点。
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode *sortedArrayToBSTProcessing(vector<int> &num,int begin,int end)
{
if(begin > end)
return NULL;
int mid = (begin+end)/2;
TreeNode *node = (TreeNode *)malloc(sizeof(TreeNode));
node->val = num[mid];
/*
if(begin == end)
{
node->left = NULL;
node->right = NULL;
return node;
}*/
node->left = sortedArrayToBSTProcessing(num,begin,mid-1);
node->right = sortedArrayToBSTProcessing(num,mid+1,end);
return node;
}
TreeNode *sortedArrayToBST(vector<int> &num) {
vector<int>::size_type len = num.size();
return sortedArrayToBSTProcessing(num,0,len-1);
}
int main(void)
{
vector<int> num;
num.push_back(1);
num.push_back(3);
/*num.push_back(4);
num.push_back(7);
num.push_back(9);
num.push_back(10);
num.push_back(13);
num.push_back(15);*/
TreeNode *head = sortedArrayToBST(num);
system("pause");
return 0;
}