题目:
给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST).示例如下:
给定排序数组:[ -10,-3, 0, 5, 9]
一个可能的答案是:[0,-3, 9,-10,null,5],它代表以下高度平衡的二叉搜索树:
0
/ \
-3 9
/ /
-10 5
- 补充如下:
- 一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
- 二叉搜索树:是一种始终满足左<根<右的特性
- 本题主要考察的是二分查找算法,把一个有序数组转换成一个二分查找树,
思路:获取中间元素,根节点为中间元素,递归处理数组的其他元素。
代码:
package com.company;
public class TestNo19 {
static class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val = x;
}
}
public TreeNode sortedArrayToBST(int[] num) {
if(num == null || num.length <1){
return null;
}
if(num.length == 1){
return new TreeNode(num[0]);
}
int len = num.length;
return toBST(num,0,len-1);//获得数组的中间位置为树的根节点
}
private TreeNode toBST(int[] num,int start,int end){
if(start > end){
return null;
}
if(start == end){
return new TreeNode(num[start]);
}
int mid = (start+end+1)/2;//mid 为数组的中间位置
TreeNode node = new TreeNode(num[mid]);
node.left = toBST(num,start,mid-1);
node.right = toBST(num,mid+1,end);
return node;
}
public static void main(String[] args) {
int[] num = {-10,-3,0,5,9};
TestNo19 t = new TestNo19();
System.out.println(t.sortedArrayToBST(num).val);
}
}
具体代码实现过程如下:
来源:CSDN
作者:胡别致
链接:https://blog.csdn.net/qq_40664693/article/details/104224653