博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
108. 将有序数组转换为二叉搜索树
阅读量:7239 次
发布时间:2019-06-29

本文共 2280 字,大约阅读时间需要 7 分钟。

108. 将有序数组转换为二叉搜索树

https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/description/

package com.test;public class Lesson108 {    public static void main(String[] args) {        int[] nums = {-10,-3,0,5,9};//        int[] nums = {0,1,2,3,4,5,6,7,8};//        int[] nums = {0,1,2,3,4,5,6};        TreeNode treeNode = sortedArrayToBST(nums);        printNode(treeNode);//        TreeNode t1 = new TreeNode(1);//        TreeNode t2 = new TreeNode(2);//        TreeNode t3 = new TreeNode(3);//        t1.left = t2;//        t1.right = t3;//        printNode(t1);    }    public static TreeNode sortedArrayToBST(int[] nums) {        int length = nums.length;        TreeNode res = bst(0, length, nums);        return res;    }    private static TreeNode bst(int start, int end, int[] nums) {        // 如果有三个点        if (end - start - 3 == 0) {            TreeNode res = new TreeNode(nums[start+1]);            TreeNode left = new TreeNode(nums[start]);            TreeNode right = new TreeNode(nums[start+2]);            res.left = left;            res.right = right;            return res;        }        // 如果有两个点        if (end - start - 2 == 0) {            TreeNode res = new TreeNode(nums[start+1]);            TreeNode left = new TreeNode(nums[start]);            res.left = left;            return res;        }        // 如果有一个点        if (end - start - 1 == 0) {            TreeNode res = new TreeNode(nums[start]);            return res;        }        // 没有点        if (start - end == 0) {            return null;        }        // 如果有很多点,取中间的点作为树根,左侧的点作为左树,右侧的点作为右树        int middle = start+ (end-start)/2;        int num = nums[middle];        TreeNode res = new TreeNode(num);        TreeNode left = bst(start,middle,nums);        TreeNode right = bst(middle+1,end,nums);        res.left = left;        res.right = right;        return res;    }    private static void printNode(TreeNode treeNode) {        if (treeNode == null) {            return;        }        // 先根        System.out.print(treeNode.val+" ");        if (treeNode.left != null) {            printNode(treeNode.left);        }        // 中根//        System.out.print(treeNode.val+" ");        if (treeNode.right != null) {            printNode(treeNode.right);        }    }}

 

转载地址:http://sgrfm.baihongyu.com/

你可能感兴趣的文章
pandas set_index和reset_index的用法
查看>>
[Bash] View Files and Folders in Bash
查看>>
PEACHPIE 0.9.11 版本发布,可以上生产了
查看>>
异常检测——局部异常因子(Local Outlier Factor ,LOF)算法
查看>>
记录一次广州白云区项目数据库连接失败问题的解决过程
查看>>
干货:Vue粒子特效(vue-particles插件)
查看>>
Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象...
查看>>
加密PDF为只读模式
查看>>
让你编写的控件库在 XAML 中有一个统一的漂亮的命名空间(xmlns)和命名空间前缀...
查看>>
MySQL数据库的锁详解【转】
查看>>
ip route 解释
查看>>
【转】Android中保持Service的存活
查看>>
Consul功能简介
查看>>
IdentityServer4实战 - API与IdentityServer的交互过程解析
查看>>
Delphi编程 -- 使用CPUID指令获取CPU信息(转自大富翁)
查看>>
Android setRequestedOrientation用法
查看>>
面向对象三大基本特性,五大基本原则
查看>>
更改窗口图标并将其显示在任务栏
查看>>
包含的语句
查看>>
正则表达式-匹配标点符号
查看>>