刷题No19. convert-sorted-array-to-binary-search-tree(有序数组转化为二叉搜索树)(java)【数组】

≯℡__Kan透↙ 提交于 2020-02-08 20:33:22

题目:

给出一个升序排序的数组,将其转化为平衡二叉搜索树(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);

    }
}

具体代码实现过程如下:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!