Given an array where elements are sorted in ascending order, convert it to a height balanced BST.


题目标签:Tree

  这道题目给了我们一个有序数组,从小到大。让我们把这个数组转化为height balanced BST。

  首先来看一下什么是binary search tree:

    每一个点的left < 节点 < right, 换一句话说,每一个点的值要大于左边的,小于右边的。

  那么什么是height balanced tree:

    每一个节点:左边的height (level) 和 右边的height (level) 只能相差1;比如说,一个点,它的左边的阶层,有4层,它右边的阶层有1层,相差3了,就不是height balanced tree。

  那么我们来分析一下怎么做这题,根据BST的特性,想象一下把一个BST树上下压缩,成一条线,那么这条线上从左到右的顺序是从小到大的。最中间的点就是root,所有左边的就是root的左边的children, 右边的就是root右边的children。有没有一种很熟悉的感觉?就和binary search一样原理。如果是给你一个array [1,2,3,4,5,6,7] 让你search一个数字n, 每次利用中间点来找,接着比较大小来分左右。这道题目等于是给了我们这个array,每次让我们找到中间点作为一个node,接着分为左右children,把范围分一下,继续递归下去。

Java Solution:

Runtime beats 14.29%

完成日期:07/02/2017

关键词:Tree

关键点:根据BST的特性,利用binary search来改变成递归function,代入值是nums array 和left right 范围两端的值

 /**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution
{
public TreeNode sortedArrayToBST(int[] nums)
{
int left = 0;
int right = nums.length-1; return buildTree(nums, left, right);
} public static TreeNode buildTree(int[] nums, int left, int right)
{
if(left > right)
return null; // parent
int mid = left + (right - left) / 2;
TreeNode node = new TreeNode(nums[mid]); // left child
int leftChild_left = left;
int leftChild_right = mid - 1;
node.left = buildTree(nums, leftChild_left, leftChild_right); // right child
int rightChild_left = mid + 1;
int rightChild_right = right;
node.right = buildTree(nums, rightChild_left, rightChild_right); return node;
}
}

参考资料:

http://www.cnblogs.com/springfor/p/3879823.html

LeetCode 算法题目列表 - LeetCode Algorithms Questions List

LeetCode 108. Convert Sorted Array to Binary Search Tree (有序数组转化为二叉搜索树)的更多相关文章

  1. [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 ...

  2. 37. leetcode 108. Convert Sorted Array to Binary Search Tree

    108. Convert Sorted Array to Binary Search Tree 思路:利用一个有序数组构建一个平衡二叉排序树.直接递归构建,取中间的元素为根节点,然后分别构建左子树和右 ...

  3. 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 ...

  4. 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.每次更新的 ...

  5. [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 ...

  6. Convert Sorted List to Binary Search Tree——将链表转换为平衡二叉搜索树 &&convert-sorted-array-to-binary-search-tree——将数列转换为bst

    Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...

  7. 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. 解题 ...

  8. leetcode 108 Convert Sorted Array to Binary Search Tree ----- java

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 给一 ...

  9. LeetCode 108: Convert Sorted Array to Binary Search Tree DFS求解

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 解题 ...

随机推荐

  1. csv文件读取

    from urllib.request import urlopen from io import StringIO import csv data = urlopen("http://py ...

  2. firebug离线安装方法-拖入法

    这里介绍的是如何在Firefox中离线安装firebug插件. 1, 下载firebug离线包, 一般就是一个*.xpi文件; 2, 打开Firefox浏览器,直接将*.xpi文件拖入Firefox浏 ...

  3. PHP命令注入笔记

    一.PHP命令注入介绍 在学习php相关的攻击时,遇到了Command Injection,即命令注入攻击,是指这样一种攻击手段,黑客通过把HTML代码输入一个输入机制(例如缺乏有效验证限制的表格域) ...

  4. Redis学习笔记之一 : 配置redis

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...

  5. SQL 常用语法一

    整理笔记,并将常用的SQL语法记录下来. 这些方法有 CASE WHEN, IFNULL,GROUP BY,LIMIT,SUBSTR 1,字段转换 CASE WHEN 意义: If(a==b) a=c ...

  6. OpenStack Ocata 超详细搭建文档

    前言 搭建前必须看我本文档搭建的是分布式O版openstack(controller+ N compute + 1 cinder)的文档.openstack版本为Ocata.搭建的时候,请严格按照文档 ...

  7. IE无法获得cookie,ie不支持cookie的解决办法,火狐支持

    发现用自己的电脑 IE7.0总是无法正常登录,别的电脑都可以. 每次登录后又被重定向回了登录页面. 可换成Firefox和google chrome 却一切OK,后来还把浏览器升级到IE8.0 问题依 ...

  8. shell二位数组——终端字符下降动画

    猜想:Shell支持关联数组,可以利用关联数组模拟二维数组. [验证猜想] #!/bin/bash array[1,1]=1 array[2,1]=2 array[3,1]=3 for i in `s ...

  9. 深入理解计算机系统chapter7

    链接:将各种代码和数据部分收集起来并组合成为单一文件的过程,这个文件可被加载到存储器并执行. 在运行时,和一个在存储器中的程序链接起来 二.静态链接库与动态链接库 静态连接库就是把(lib)文件中用到 ...

  10. Pro Flight YOKE 设备键位映射踩过的坑

    背景 VR游戏项目.街机游戏项目7月阶段版本快要结束了,考虑到带有键鼠外设显得逼格比较Low,所以决定采用"高大上"的专业设备来进行游戏操作. 需求 需要将键盘鼠标操作的18个键位 ...