Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
使用二分法。
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode
{
int data;
TreeNode *left;
TreeNode *right;
TreeNode(int x):data(x),left(NULL),right(NULL) {}
};
//用二分法
class solution
{
private:
vector<int> k;
public:
TreeNode *build(vector<int> &num,int m,int n)
{
if(m>n) return NULL;
int mid = (m+n)/2;
TreeNode *root = new TreeNode(num[mid]);
root->left = build(num,m,mid-1);
root->right = build(num,mid+1,n);
return root;
}
TreeNode *sortedArrayToBst(vector<int> &num)
{
if(num.empty())
{
return NULL;
}
return build(num,0,num.size()-1);
}
void midTraverse(TreeNode *root)
{
if(root == NULL) return;
midTraverse(root->left);
k.push_back(root->data);
midTraverse(root->right);
}
void show()
{
for(int i=0;i<k.size();i++)
{
printf("%d ",k[i]);
}
printf("\n");
}
};
void main()
{
int a[] = {1,2,3,4,5,6,7,8,9,10};
vector<int> vec(a,a+10);
solution *sol = new solution;
TreeNode *root = sol->sortedArrayToBst(vec);
sol->midTraverse(root);
sol->show();
delete sol;
}