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

Posted 几米空间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 范围两端的值

 

 

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution 
11 {
12     public TreeNode sortedArrayToBST(int[] nums) 
13     {
14         int left = 0;
15         int right = nums.length-1;
16         
17         return buildTree(nums, left, right);
18     }
19     
20     public static TreeNode buildTree(int[] nums, int left, int right)
21     {
22         if(left > right)
23             return null;
24         
25         
26         // parent
27         int mid = left + (right - left) / 2;
28         TreeNode node = new TreeNode(nums[mid]);
29         
30         // left child
31         int leftChild_left = left;
32         int leftChild_right = mid - 1;
33         node.left = buildTree(nums, leftChild_left, leftChild_right);
34         
35         // right child
36         int rightChild_left = mid + 1;
37         int rightChild_right = right;
38         node.right = buildTree(nums, rightChild_left, rightChild_right);
39         
40         return node;
41     }
42 }

参考资料:

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

Leetcode 108. Convert Sorted Array to Binary Search Tree

LeetCode_108. Convert Sorted Array to Binary Search Tree

[LeetCode]题解(python):108-Convert Sorted Array to Binary Search Tree

Leetcode 108. Convert Sorted Array to Binary Search Tree

leetcode108. Convert Sorted Array to Binary Search Tree