给定有序数组,创建高度最小的二叉查找树

TreeNode createMinimalBST(int arr[], int start, int end)

{

if (end < start)

{

return null;

}

int mid = start + (end - start) / 2;

TreeNode n=new TreeNode(arr[mid]);

n.left=createMinimalBST(arr,start,mid-1);

n.right=createMinimalBST(arr,mid+1,end);

return n;

}

TreeNode createMinimalBST(int array[])

{

return createMinimalBST(array,0,array.length-1);

}

时间: 2024-11-05 20:44:27

给定有序数组,创建高度最小的二叉查找树的相关文章

177 把排序数组转换为高度最小的二叉搜索树

原题网址:https://www.lintcode.com/problem/convert-sorted-array-to-binary-search-tree-with-minimal-height/description 描述 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树. There may exist multiple valid solutions, return any of them. 您在真实的面试中是否遇到过这个题?  是 样例 给出数组 [1,2,3,4,5

找出有序数组中绝对值最小的数

问题: 一个有序数组,值有可能有负值,也有可能没有,现需要找出其中绝对值最小的值. 方法1: 遍历数组,找到绝对值最小值,时间复杂度O(n),n为元素个数. 方法2: 二分查找,因为数组有序,可以利用二分查找,时间复杂度O(logn). 分析步骤: 如果第一个数为正数,说明整个数组没有负数,直接返回第一个数 如果最后一个数为负数,说明整个数组没有正数,直接返回最后一个数 数组元素有正有负,说明绝对值最小的元素肯定在正负数交界处,需要二分查找上场: 如果a[mid]<0,因为数组是升序,说明绝对值

14.高度最小的BST

题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] vals,请返回创建的二叉查找树的高度. 返回高度的代码如下: import java.util.*; public class MinimalBST { public int buildMinimalBST(int[] vals) { return (int)(Math.log(vals.length)/Math.log(2))+1; } } 创建高度最小的二叉查找

【20】高度最小的BST

[题目] 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] vals,请返回创建的二叉查找树的高度. [代码] import java.util.*; public class MinimalBST { public int buildMinimalBST(int[] vals) { if(vals == null || vals.length <1) return 0; return buildMinimalBSTCore(

合并k个有序数组

给定K个有序数组,每个数组有n个元素,想把这些数组合并成一个有序数组 可以利用最小堆完成,时间复杂度是O(nklogk),具体过程如下: 创建一个大小为n*k的数组保存最后的结果创建一个大小为k的最小堆,堆中元素为k个数组中的每个数组的第一个元素重复下列步骤n*k次:每次从堆中取出最小元素(堆顶元素),并将其存入输出数组中用堆顶元素所在数组的下一元素将堆顶元素替换掉,如果数组中元素被取光了,将堆顶元素替换为无穷大.每次替换堆顶元素后,重新调整堆初始化最小堆的时间复杂度O(k),总共有kn次循环,

108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树.此题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1.示例:给定有序数组: [-10,-3,0,5,9],一种可行答案是:[0,-3,9,-10,null,5],它可以表示成下面这个高度平衡二叉搜索树:      0     / \   -3   9   /   / -10  5详见:https://leetcode.com/problems/convert-sorted-array-to-binary

LeetCode(108):将有序数组转换为二叉搜索树

Easy! 题目描述: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / -3 9 / / -10 5 解题思路: 这道题是要将有序数组转为二叉搜索树,所谓二叉搜索树,是一种始终满足左<根<右(另外一种更直白的解释,二叉搜索树:空

将有序数组转换为二叉搜索树

问题描述: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / -3 9 / / -10 5 解题思路: 用数组最中间的的值将数组分为三部分:左半部分.中间值.右半部分: 用中间值构造节点,数组左半部分构造节点的左子树,右半部分右子树

LeetCode--108--将有序数组转化为二叉搜索树

问题描述: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / -3 9 / / -10 5 思路:由于数组是有序数组,所以只需用二分法构造即可,mid即为根节点,0:mid 的中间点为左子树的根节点,mid+1:末尾的中间点为右子树