题目:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
Tree Depth-first Search
题目来源:https://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
解题思路:不断的把中间的值作为树根,这样才能够保持平衡性
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void sortedArrayToBST(TreeNode *root,vector<int> &num,int first,int mid,int last)
{
if(first>=last)
return ;
if(first<mid)//说明可以有左子树
{
root->left=new TreeNode(num[first+((mid-first)>>1)]);
sortedArrayToBST(root->left,num,first,first+((mid-first)>>1),mid-1);
}
if(last>mid)//说明可以有右子树
{
root->right=new TreeNode(num[mid+1+((last-mid)>>1)]);
sortedArrayToBST(root->right,num,mid+1,mid+1+((last-mid)>>1),last);
}
}
TreeNode *sortedArrayToBST(vector<int> &num)
{
if(num.empty())
return NULL;
TreeNode *root=new TreeNode(num[(num.size()-1)>>1]);
sortedArrayToBST(root,num,0,(num.size()-1)>>1,num.size()-1);
return root;
}
int main()
{
int A[]={1,2,3,4,5,6,7,8};
vector<int> num(A,A+8);
TreeNode *root=sortedArrayToBST(num);
system("pause");
return 0;
}