LeetCode题库解答与分析——#108. 将有序数组转换为二叉搜索树ConvertSortedArrayToSearchBinaryTree

原创 2018年04月17日 09:39:57

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

此题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。

 

示例:

给定有序数组: [-10,-3,0,5,9],

一种可行答案是:[0,-3,9,-10,null,5],它可以表示成下面这个高度平衡二叉搜索树:

      0
     / \
   -3   9
   /   /
 -10  5

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

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.


Example:

Given the sorted array: [-10,-3,0,5,9],

One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:

      0
     / \
   -3   9
   /   /
 -10  5

个人思路:

既然是有序数组,则取中间项则可以保证最终得到的二叉搜索树为平衡的。于是取中间项为根节点,并将其左右分别拆分为左右子树的数组,用递归的方式再分别使其计算左右子树的根节点,直到取得数组为空返回空节点。

代码(JavaScript):

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {number[]} nums
 * @return {TreeNode}
 */
var sortedArrayToBST = function(nums) {
    if(nums.length==0){
        return null;
    }
    var l=nums.length;
    var half=parseInt(l/2);
    var root=new TreeNode(nums[half]);
    if(half==0){
        return root;
    }
    var left=new Array(half);
    var right=new Array(l-half-1);
    for(var i=0;i<left.length;i++){
        left[i]=nums[i];
    }
    root.left=arguments.callee(left);
    for(var i=0;i<right.length;i++){
        right[i]=nums[i+half+1];
    }
    root.right=arguments.callee(right);
    return root;
};



数据结构(C版)

-
  • 1970年01月01日 08:00

LeetCode108_Convert SortedArray to BinarySearchTree(将有序数组转成二叉排序树) Java题解

题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BS...
  • u012249528
  • u012249528
  • 2015-07-30 09:19:54
  • 946

LeetCode OJ 之 Convert Sorted Array to Binary Search Tree(把有序数组转化为二叉搜索树)

题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BS...
  • u012243115
  • u012243115
  • 2014-12-15 09:33:34
  • 984

有序数组转为二叉查找树

我们用递归方法遍历有序数组来建立二叉查找树,每次都把[left, right]中间的数看成根节点建树 由于二叉查找树的中序遍历是有序的,所以我们用中序遍历二叉查找树时,可以获得数组是有序的,那么确定 ...
  • small_small_chick
  • small_small_chick
  • 2013-09-16 18:40:02
  • 721

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

问题 给定一个有序数组,数组元素升序排列,试将该数组转换为一棵平衡二叉搜索树(Balanced Binary Search Tree)。   思路 这个问题用递归很容易解出来。考虑下面一棵二叉...
  • ssjhust123
  • ssjhust123
  • 2012-07-26 08:27:04
  • 6864

leetcode 将已排序的 数组/链表 转换为二叉搜索树(BST),Python实现

思路:不论是数组还是链表,递归地找到他的root(即序列的中点),并返回。 1. 将数组转换为二叉树: # Definition for a binary tree node. # class T...
  • u012560212
  • u012560212
  • 2017-05-24 21:06:13
  • 517

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

有一个增序排列的数组,将其转换为二叉搜索树。 class Node { public: Node(int v) { value = v; left = NULL; ri...
  • brucehb
  • brucehb
  • 2015-02-22 23:51:48
  • 641

数组——将排序数组转换为平衡二叉搜索树

题目描述: Given an array where elements are sorted in ascending order, convert it to a height balan...
  • jingsuwen1
  • jingsuwen1
  • 2016-05-16 20:21:25
  • 409

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

题目描述: 将有序数组转换为二叉搜索树        将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。        此题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差...
  • qq_33168253
  • qq_33168253
  • 2018-04-07 00:45:27
  • 21

将搜索二叉树转换成双向链表

题目 对二叉树的节点来说, 有本身的值域, 有指向左孩子和右孩子的两个指针; 对双向链表的节点来说,有本身的值域, 有指向上一个节点和下一个节点的指针。 在结构上, 两种结构有相似性, 现在...
  • fly_yr
  • fly_yr
  • 2016-09-01 16:18:59
  • 742
收藏助手
不良信息举报
您举报文章:LeetCode题库解答与分析——#108. 将有序数组转换为二叉搜索树ConvertSortedArrayToSearchBinaryTree
举报原因:
原因补充:

(最多只允许输入30个字)