【简单算法】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); } };
相关文章推荐
- Leetcode 108. 将有序数组转换为二叉搜索树
- 笔试算法题(31):将有序数组转换成BST表示 & 线段树的应用
- 简单归并算法-有序数组合并算法实现
- 【简单算法】31.合并两个有序数组
- LeetCode - 108. 将有序数组转换为二叉搜索树
- LeetCode 108. 将有序数组转换为二叉搜索树
- 算法:有序数组转为平衡的二叉搜索树
- 两个有序数组(有序段sorted run)简单归并算法的比较次数的分析
- Leetcode Convert Sorted Array to Binary Search Tree 有序数组转换成二叉搜索树BST
- 【LintCode 简单】177. 把排序数组转换为高度最小的二叉搜索树
- leetcode- 将有序数组转换为二叉搜索树(java)
- 一个简单的XML与数组之间的转换
- 归并算法之有序数组合并算法实现
- ArrayList的简单应用,数组之间的转换。
- [算法] 循环有序数组查找递归实现
- LintCode:把排序数组转换为高度最小的二叉搜索树
- 【简单算法】27.验证二叉搜索树
- 求两个有序数组的中位数-算法导论
- 把排序数组转换为高度最小的二叉搜索树-LintCode