Leetcode108. 将有序数组转换为二叉搜索树
题目:
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],、
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
题解:
按照二分的思想。中点作为根节点。
中点左边的数作为左子树,中点右边的数作为右子树。
scala代码如下:
迭代:
def sortedArrayToBST(nums: Array[Int]): TreeNode = {
initTree(nums, 0, nums.length - 1)
}
def initTree(nums: Array[Int], left: Int, right: Int): TreeNode = {
if (left > right) {
null
} else if (left == right) {
new TreeNode(nums(left))
}
else {
val mid: Int = left + (right - left) / 2
val node = new TreeNode(nums(mid))
node.left = initTree(nums, left, mid)
node.right = initTree(nums, mid + 1, right)
node
}
}
java代码:
public static TreeNode sortedArrayToBST(int[] nums) {
return initTree(nums, 0, nums.length);
}
private static TreeNode initTree(int[] nums, int left, int right) {
//递归终止条件
if (left == right) return null;
int mid = (left + right) / 2;
TreeNode node = new TreeNode(nums[mid]);
node.left = initTree(nums, left, mid);
node.right = initTree(nums, mid + 1, right);
return node;
}