题目描述
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
给定一个已排好序的数组,构建其相应的二叉搜索树。
解题思路
此题和题目Convert Sorted List to Binary Search Tree殊途同归,递归方法:
- 找到待构建数组的中间位置,将其对应的treeNode提出作为根节点(root);
- 构建中间位置左边链表的BST,返回结果作为root.left;
- 构建 中间位置的右边链表的BST,返回结果作为root.right;
代码
/**
* 根据已排序列表构建二叉搜索树
* @param num 已排序数组
* @return
*/
public static TreeNode sortedArrayToBST(int[] num) {
if(num==null || num.length==0)
return null;
return buildBST(0, num.length - 1,num);
}
/**
* 构建二叉搜索树
* @param start 待构建二叉树的treeNode列表的起始位置
* @param end 待构建二叉树的treeNode列表的结束位置
* @param num
* @return
*/
public static TreeNode buildBST(int start, int end,int[] num) {
int middle = start + (end - start) / 2;//中间节点
TreeNode root = new TreeNode(num[middle]);
if(start==end){
return root;
}
if (middle - 1 >= start) {
root.left = buildBST(start, middle - 1, num);
}
if (middle + 1 <= end) {
root.right = buildBST(middle + 1,end, num);
}
return root;
}