您的位置:首页 > 其它

把排序数组转换为高度最小的二叉搜索树-LintCode

2017-04-11 16:34 363 查看
描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 注意事项There may exist multiple valid solutions, return any of them.样例:给出数组 
[1,2,3,4,5,6,7]
,返回
4
/   \
2     6
/ \    / \
1   3  5   7
思路:首先在这里说明一下什么是排序二叉树排序二叉树具有以下几个特点(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;观察排序二叉树及所给出的排序数组可知,根节点是一组排序数的中间数,其左子树为中间数前的数组成,右子树为中间数后面的数组成的,其左右子树也遵循上述规律,由此我们可以不断使用二分法进行递归操作完成排序二叉树的建立。代码:/*** Definition of TreeNode:* class TreeNode {* public:*     int val;*     TreeNode *left, *right;*     TreeNode(int val) {*         this->val = val;*         this->left = this->right = NULL;*     }* }*/class Solution {public:/*** @param A: A sorted (increasing order) array* @return: A** node*/TreeNode *sorted(vector<int> &A,int start,int end){if(start>end)return NULL;int mid=(start+end)/2;TreeNode *r=new TreeNode(A[mid]);r->left=sorted(A,start,mid-1);r->right=sorted(A,mid+1,end);return r;}TreeNode *sortedArrayToBST(vector<int> &A) {// write your code hereif(A.empty())return NULL;int start=0;int end=A.size()-1;int mid=(start+end)/2;TreeNode *root=new TreeNode(A[mid]);root->left=sorted(A,start,mid-1);root->right=sorted(A,mid+1,end);return root;}};
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: