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.
题目标签: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 (有序数组转化为二叉搜索树)的更多相关文章
- [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 ...
- 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 (将有序数组转换成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. Fo ...
- 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 ...
- 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. 解题 ...
- 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. 给一 ...
- 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. 解题 ...
随机推荐
- Python 浅谈注释的重要性
最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是难以下咽,几乎每个字符都要咨询他,用老师的话来说,这就是山炮编程员,所以此时的我意识到写一篇关于注释程序的重要性了,因此特地的写一篇文章帮助大家 ...
- lintcode.67 二叉树中序遍历
二叉树的中序遍历 描述 笔记 数据 评测 给出一棵二叉树,返回其中序遍历 您在真实的面试中是否遇到过这个题? Yes 样例 给出二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,3, ...
- 认识StringBuffer类
概述: StringBuffer类是线程安全的可变字符序列 线程安全效率低 StringBuffer和String的区别 * String是一个不可变的字符序列 * StringBuffer是一个可变 ...
- jdk版本切换
安装1.6/1.7/1.8版本的jdk 保存jdk的安装目录下的文件 卸载所有jdk 将jdk各个版本拷贝到一个文件夹下 配置环境变量 因为安装之后系统会有注册表之类的文件,单纯的修改环境是不会修改成 ...
- 在JavaScript中使用json.js:Ajax项目之POST请求(异步)
经常在百度搜索框输入一部分关键词后,弹出候选关键热词.现在我们就用Ajax技术来实现这一功能. 一.下载json.js文件 百度搜一下,最好到json官网下载,安全起见. 并与新建的两个文件部署如图 ...
- 洗礼灵魂,修炼python(1)--python简介
首先,本人也是刚接触python短短几个月,没有老鸟的经验和技能,大佬勿喷,以下所有皆是本人对python的理解 python,是一种解释型(高级)的,面向对象的,带有动态语义的高级程序设计的开源语言 ...
- 【笔记】php常用函数
phpusleep() 函数延迟代码执行若干微秒.unpack() 函数从二进制字符串对数据进行解包.uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.time_sleep_unti ...
- NOIP2014_day2:无线网络发射器选址
#include<stdio.h>//NOIP2014 day2 :无线网络发射器选址 ,max=; ][]; void wifi(int a,int b,int c) { int i,j ...
- 项目发布Debug和Release版的区别
一.Debug和Release的区别 Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试 ...
- HDU1205 吃糖果
吃糖果 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submis ...