题目链接:https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/?tab=Description
本题的要求是:将升序的数组转化为高度平衡的二叉搜索树。
思路:使用递归求解,数组中间的元素作为root,左侧元素用来构造root的左子树,右侧元素用来构造root的右子树。如此递归下去。。。
对于生成的BST,经过中序遍历即可以得到升序的序列。
Java 代码如下:
public class Solution {
// 使用给定的升序数组,构造出对应的高度平衡的二叉树
public TreeNode sortedArrayToBST(int[] nums) {
if (nums == null || nums.length == 0) {
return null;
}
return buildBST(nums, 0, nums.length - 1);
}
public TreeNode buildBST(int[] nums, int left, int right) {
if (right < left) {
return null;
}
// 寻找root节点:root节点即为数组的中间数
int mid = (right + left) / 2;
TreeNode root = new TreeNode(nums[mid]);
// 递归构造左子树
root.left = buildBST(nums, left, mid - 1);
// 递归构造右子树
root.right = buildBST(nums, mid + 1, right);
return root;
}
}