您的位置:首页 > 其它

【简单算法】30.将有序数组转换为二叉搜索树

2018-05-03 22:04 387 查看

题目:

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

0
/ \
-3   9
/   /
-10  5

解题思路如下:

每次取数组最中间的数据作为根节点,数组分为半部分和后半部分,前半部分构成BST的左子树,后半部分构成BST的右子树,依次递归。

代码如下:

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* creatBST(vector<int>& nums,int left,int right){
if(left > right || left < 0 || right > nums.size()){
return NULL;
}

int mid = (left+right)/2;
TreeNode * root = new TreeNode(nums[mid]);
root->left = creatBST(nums,left,mid-1);
root->right = creatBST(nums,mid+1,right);

return root;
}

TreeNode* sortedArrayToBST(vector<int>& nums) {
return  creatBST(nums,0,nums.size()-1);
}
};

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: