面试题 04.02. 最小高度树

题目

给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。

示例1:

1
2
3
4
5
6
7
8
9
给定有序数组: [-10,-3,0,5,9],

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

0
/ \
-3 9
/ /
-10 5

解法

解法一:

递归建树

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public TreeNode sortedArrayToBST(int[] nums) {
return buildTree(nums, 0, nums.length - 1);
}

private TreeNode buildTree(int[] nums, int begin, int end) {
if (begin > end) {
return null;
}

if (begin == end) {
return new TreeNode(nums[begin]);
}

int mid = (begin + end) >> 1;
TreeNode node = new TreeNode(nums[mid]);
node.left = buildTree(nums, begin, mid - 1);
node.right = buildTree(nums, mid + 1, end);
return node;
}
0%