zoukankan      html  css  js  c++  java
  • Leetcode 108.将有序数组转化为二叉搜索树

    将有序数组转化为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

    本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

    示例:

    给定有序数组: [-10,-3,0,5,9],

    一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

    解题思路:因为给定的数组是按照升序排列的,所以可以先取出数组中间位置的值作为二叉查找树的根结点,然后以该数组中间位置的值为中心,将左边的数组划分到根结点的左子树中,右边的数组划分到根结点的右子树中,这样就能保证根结点的左子树上任意结点的值都小于根结点的值,右子树上任意结点的值大于根节点的值。接下来,可以使用递归地方法继续取出左边数组的中间值作为根结点的左子结点,右边数组的中间值作为根结点的右子结点,然后以左边数组中间值为中心,再次划分左右子树,右边数组同理,如此递归下去,对于每个结点,总是能保证其左子树上任意结点的值都要小于该节点的值,其右子树上任意结点的值都要大于该节点的值。

     1 * public class TreeNode {
     2  *     int val;
     3  *     TreeNode left;
     4  *     TreeNode right;
     5  *     TreeNode(int x) { val = x; }
     6  * }
     7  */
     8 class Solution{
     9     public TreeNode sortedArrayToBST(int[] nums){
    10         if(nums==null || nums.length==0){
    11             return null;
    12         }
    13         return fun(nums,0,nums.length-1);
    14     }
    15 
    16     public TreeNode fun(int[] n,int min,int max){
    17         if(min>max){
    18             return null;
    19         }
    20         int mid=(min+max)/2;
    21         TreeNode node=new TreeNode(n[mid]);//取递增排序的数组的中间值
    22         node.left=fun(n,min,mid-1);
    23         node.right=fun(n,mid+1,max);
    24         return node;
    25     }
    26 }
  • 相关阅读:
    Pytorch 随机数种子设置
    python 利用 dictionary 的 .get() 操作,避免写 if-else
    PEP-8 or google 风格 python 代码风格和注释规范
    Vim 多文件切换使用
    Shell 变量及脚本使用
    python numpy 大矩阵运算容易内存爆炸
    Ubuntu 配置 Pytorch on Graph (PoG) 环境
    Markdown 学习笔记
    Linux-saltstack
    Python字符串详解
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10163096.html
Copyright © 2011-2022 走看看