题目地址:https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
题目要求将一个有序数组转换为一个平衡二叉树,很明显题目想让我们利用数组有序这个特征。
既然有序,又要构建二叉平衡树,那么很显然就要用二分法来构建这棵树。
数组的中间元素作为根节点,中间元素的左边元素作为平衡二叉树的左子树节点,右边的元素作为平衡二叉树的右子树节点。下面递归构建就是了:
代码实现如下:
public class ConvertSortedArrayToBinarySearchTree {
public static TreeNode sortedArrayToBST(int[] nums) {
if (nums.length == 0)
return null;
TreeNode root = null;
root = buildBST(nums, 0, nums.length - 1, root);
return root;
}
public static TreeNode buildBST(int[] nums, int low, int high, TreeNode root) {
if (low > high)
return null;
if (low == high)
root = new TreeNode(nums[low]);
int mid = low + (high - low) / 2;
root = new TreeNode(nums[mid]);
root.left = buildBST(nums, low, mid - 1, root.left);
root.right = buildBST(nums, mid + 1, high, root.right);
return root;
}
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
TreeNode root = sortedArrayToBST(nums);
return;
}
}