Convert Sorted Array to Binary Search Tree——LeetCode
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
题目大意:给定一个升序序列的数组,将其转换为二叉搜索树。
解题思路:数组中间元素是根元素,根元素将数组划分为两部分,两个部分的中心元素分别为根元素的左右孩子,依次递推。。。可用迭代或递归来做。
解法一(迭代):迭代需要自己额外记录下标
- public TreeNode sortedArrayToBST(int[] num) {
- if (num == null || num.length == 0) {
- return null;
- }
- if (num.length == 1) {
- return new TreeNode(num[0]);
- }
- Deque<Pair> queue = new ArrayDeque<>();
- TreeNode root = new TreeNode(num[(num.length - 1) / 2]);
- queue.add(new Pair(0, num.length - 1, root));
- while (!queue.isEmpty()) {
- Pair pair = queue.poll();
- int pre = pair.pre;
- int post = pair.post;
- int curr = (post + pre) / 2;
- TreeNode tNode = pair.node;
- if (curr > pre) {
- TreeNode left = new TreeNode(num[(curr - 1 + pre) / 2]);
- tNode.left = left;
- queue.add(new Pair(pre, curr - 1, left));
- }
- if (post > curr) {
- TreeNode right = new TreeNode(num[(post + curr + 1) / 2]);
- tNode.right = right;
- queue.add(new Pair(curr + 1, post, right));
- }
- }
- return root;
- }
- private static class Pair {
- int pre;
- int post;
- TreeNode node;
- public Pair(int pre, int post, TreeNode node) {
- this.pre = pre;
- this.post = post;
- this.node = node;
- }
- }
解法二(递归):
- public TreeNode sortedArrayToBST(int[] num) {
- if (num == null || num.length == 0) {
- return null;
- }
- TreeNode root = helper(0, num.length - 1, num);
- return root;
- }
- private TreeNode helper(int low, int high, int[] num) {
- if (low > high) {
- return null;
- }
- int mid = (low + high) / 2;
- TreeNode node = new TreeNode(num[mid]);
- node.left = helper(low, mid - 1, num);
- node.right = helper(mid + 1, high, num);
- return node;
- }
Convert Sorted Array to Binary Search Tree——LeetCode的更多相关文章
- Convert Sorted Array to Binary Search Tree leetcode java
题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...
- Convert Sorted Array to Binary Search Tree || LeetCode
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * s ...
- 【LeetCode OJ】Convert Sorted Array to Binary Search Tree
Problem Link: http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ Same idea ...
- LeetCode:Convert Sorted Array to Binary Search Tree,Convert Sorted List to Binary Search Tree
LeetCode:Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in asce ...
- LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14
108. 将有序数组转换为二叉搜索树 108. Convert Sorted Array to Binary Search Tree 题目描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索 ...
- [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 ...
随机推荐
- python学习之-成员信息增删改查
python学习之-成员信息增删改查 主要实现了成员信息的增加,修改,查询,和删除功能,写着玩玩,在写的过程中,遇到的问题,旧新成员信息数据的合并,手机号和邮箱的验证,#!/usr/bin/env p ...
- XML 序列化与PULL解析
简介 Pull解析XML XmlPullParser解析器的运行方式与SAX解析器相似.它提供了类似的事件(开始元素和结束元素),但需要使用parser.next()方法来提取它们.事件将作为数值代码 ...
- .NET aspx页面中的按钮无法响应事件
原因只有一个,页面中存在多个form标签.按Ctrl+F,找到多余的删掉即可
- (Excel导出失败)检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失
在DCOM 中不存在WORD.EXCEL等OFFICE组件 最近在做一个关于office转存PDF的Web项目.开发过程一切顺利. 起初在网上找到一些Word,PPT转PDF的代码.很好用.一切顺 ...
- 关于调用office com组件导出Excel
服务器环境: 环境为win2008 r2,系统为64位,程序是C#的winform.因为需要处理数据,然后生成Excel,耗时太长,就使用了多线程.winform程序是由计划任务启动,每天晚上去跑. ...
- 在Global.asax文件里实现通用防SQL注入漏洞程序(适应于post/get请求)
可使用Global.asax中的Application_BeginRequest(object sender, EventArgs e)事件来实现表单或者URL提交数据的获取,获取后传给SQLInje ...
- android launcher3 home页简易分析
最近在修改一个问题:就是修改home页下,用户手动拖出来的APP图片下面的字体显示不全,思路比较明确,需要尽量加大整个APP控件的高度,或者缩小图片和文字之间的间隔. 跟代码发现APP整个控件的lay ...
- 创建 序列 存储过程 job
掌握了 oracle中的 dbms_lock 函数,该函数 主要用于暂停执行的程序 1.用意 写job 以10分钟 为单元,前10分钟 从 1到10 插入测试表, 中间10分钟从 11到20插入测试表 ...
- CoreLocation+MapKit系统定位(含坐标以及详细地址)
iOS8 之后出现一些新的配置 [self.manager requestWhenInUseAuthorization]; 并且在info.plist文件中增加 NSLocationWhenInUse ...
- js bind
1.作用 函数的bind方法用于将函数体内的this绑定到某个对象,然后返回一个新函数. //bind 相比于call apply this 都等于 obj; bind是产生一个新的函数 不执 ...