给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。
注意事项
There may exist multiple valid solutions, return any of them.
样例
给出数组 [1,2,3,4,5,6,7]
, 返回
4
/ \
2 6
/ \ / \
1 3 5 7
解题思路:二分法进行遍历每步记录区间左和右和节点地址,并进行建树,但是要注意在求问题会最终转化为区间长度为2或3的建立,如何才能不冲突要在下标上进行一些改进不然会出现重复出现某元素的情况。
class Solution { public: /** * @param A: A sorted (increasing order) array * @return: A tree node */ TreeNode *Ans=new TreeNode(0); void dfs(int l,int r,TreeNode *ans,vector<int>t){ ans->val=t[(r+l+1)/2]; if(r==l)return; ans->left=new TreeNode(0); dfs(l,(r+l-1)/2,ans->left,t); if(r-(r+l+1)/2>0){ ans->right=new TreeNode(0); dfs((r+l+1)/2+1,r,ans->right,t); } } TreeNode *sortedArrayToBST(vector<int> &A) { if(A.size()==0)return NULL; // write your code here dfs(0,A.size()-1,Ans,A); return Ans; } };