LeetCode OJ——Convert Sorted Array to Binary Search Tree
http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
将一个升序的数组转换成 height balanced BST高度平衡的二叉搜索树,根据二叉搜索树的特征,所有比根节点小的值,都在根节点的左边,所有比根节点大的值,都在根节点的右边。建立的过程就是一个个的插入。但要求是高度平衡的,即不能是各种偏的那样,否则的话,搜索的代价会增大,最佳的时候是O(height),height balanced的时候也是O(height).所以会涉及到各种左旋转,右旋转,先左旋再右旋,先右旋再左旋的操作(为了平衡高度),即AVL树。
但是根据本题的特点,数组是有序的,所以可以找到最佳高度的构造,只要一直去中点来做根,递归建造。代码如下:
#include <iostream>
#include <vector> using namespace std; struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
}; class Solution {
public:
void fun(int i,int j,TreeNode *node,vector<int> &num)
{
if(i==j)
{
node->val = num[i];
return;
}
int mid = (j-i)/+i;
node->val = num[mid];
if(mid->=i)
{
TreeNode *nodeLeft = new TreeNode();
node->left = nodeLeft;
fun(i,mid-,nodeLeft,num);
}
if(j>=mid+)
{
TreeNode *nodeRight = new TreeNode();
node->right = nodeRight;
fun(mid+,j,nodeRight,num);
} }
TreeNode *sortedArrayToBST(vector<int> &num) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(num.size()==)
return NULL; TreeNode *root = new TreeNode();
fun(,num.size()-,root,num); return root;
}
}; int main()
{
Solution *mySolution = new Solution();
vector<int> input;
//input.push_back(1);
//input.push_back(3);
//input.push_back(5);
//input.push_back(7);
//input.push_back(9);
mySolution->sortedArrayToBST(input); return ;
}
LeetCode OJ——Convert Sorted Array to Binary Search Tree的更多相关文章
- [LeetCode] 108. Convert Sorted Array to Binary Search Tree 把有序数组转成二叉搜索树
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ...
- [Leetcode][JAVA] Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
- 【leetcode】Convert Sorted Array to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
- 37. leetcode 108. Convert Sorted Array to Binary Search Tree
108. Convert Sorted Array to Binary Search Tree 思路:利用一个有序数组构建一个平衡二叉排序树.直接递归构建,取中间的元素为根节点,然后分别构建左子树和右 ...
- [LeetCode] 108. Convert Sorted Array to Binary Search Tree ☆(升序数组转换成一个平衡二叉树)
108. Convert Sorted Array to Binary Search Tree 描述 Given an array where elements are sorted in ascen ...
- LeetCode 108. Convert Sorted Array to Binary Search Tree (将有序数组转换成BST)
108. Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascendin ...
- leetcode 108. Convert Sorted Array to Binary Search Tree 、109. Convert Sorted List to Binary Search Tree
108. Convert Sorted Array to Binary Search Tree 这个题使用二分查找,主要要注意边界条件. 如果left > right,就返回NULL.每次更新的 ...
- LeetCode 108. Convert Sorted Array to Binary Search Tree (有序数组转化为二叉搜索树)
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 题目 ...
- Java for LeetCode 108 Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 解题 ...
随机推荐
- sql规范
(一) 建表规约 -------------- 1. [强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint( 1表示是,0表示否). > 说明 ...
- 一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师,请教大神
一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师 LZ本人想往架构师发展, 业余时间也会看一些书籍, 但是感觉没有头绪, 有些书看了,也没有地方实践 我做了4年的java开发, 在一个公 ...
- logback写日志
https://blog.csdn.net/u010128608/article/details/76618263 https://blog.csdn.net/zhuyucheng123/articl ...
- Python简单试题2
1,给定一组数据,将奇数进行从小到大排序,偶数在原位置不变 例: 原数据:[5, 3, 2, 8, 1, 4] 排序后:[5, 3, 2, 8, 1, 4] 若数组为空,则返回空数组. 代码如下: ...
- Linux下的硬件驱动——USB设备(转载)
usb_bulk_msg函数 当对usb设备进行一次读或者写时,usb_bulk_msg 函数是非常有用的; 然而, 当你需要连续地对设备进行读/写时,建议你建立一个自己的urbs,同时将urbs 提 ...
- LeetCode(258) Add Digits
题目 Given a non-negative integer num, repeatedly add all its digits until the result has only one dig ...
- 用Comparator排序和分组
Test实体 import java.util.Objects; /** * @author gallen * @description * @date 2018/11/16 * @time 18:5 ...
- Cinder配置多Ceph后端步骤
1. 检查cinder当前backend配置 使用cinder service-list,查看cinder-volume服务的Host字段格式. 旧版格式: 新版格式: 旧版中Host字段是cinde ...
- HDU 5528 Count a * b 欧拉函数
题意: 定义函数\(f(n)\)为\(i \cdot j \not\equiv 0 \; (mod \; n)\)的数对\((i,j)\)的个数\((0 \leq i,j \leq n)\) \(g( ...
- 用HashMap优化斐波那契数列 java算法
斐波那契是第一项为0,第二项为1,以后每一项是前面两项的和的数列. 源码:Fibonacci.java public class Fibonacci{ private static int times ...