当前位置: 首页 > news >正文

【Hot100】LeetCode—108. 将有序数组转换为二叉搜索树

目录

  • 1- 思路
    • 递归-
  • 2- 实现
    • ⭐108. 将有序数组转换为二叉搜索树——题解思路
  • 3- ACM 实现


  • 原题连接:108. 将有序数组转换为二叉搜索树

1- 思路

递归-

  • 整体思路:①选择一个中间点,依据中间点 ②遍历左区间 构造左子树③遍历右区间,构造右子树

递归函数

  • 1- 参数及返回值
    • 参数为 数组、左区间、右区间,区间选择为 左闭右闭。即 [left,right]
  • 2- 终止条件
    • 区间不规范,即 if( left > right ) 则为非法区间,此时 return
  • 3- 递归逻辑
    • ① 寻找 mid = (left+right)/2
    • ② 构造当前结点 TreeNode root = new TreeNode(nums[mid]);
    • ③ 构造做子树:root.left = Traversal(nums,left,mid-1);
    • ④ 构造右子树:root.right = Traversal(nums,mid+1,right);

2- 实现

⭐108. 将有序数组转换为二叉搜索树——题解思路

在这里插入图片描述

class Solution {public TreeNode sortedArrayToBST(int[] nums) {return Traversal(nums,0,nums.length-1);}public TreeNode Traversal(int[] nums,int left,int right){// 终止条件if(left>right){return null;}int mid = (left+right)/2;TreeNode root = new TreeNode(nums[mid]);root.left = Traversal(nums,left,mid-1);root.right = Traversal(nums,mid+1,right);return root;}
}

3- ACM 实现

public class buildTree {public static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}}public static TreeNode build(int[] nums){// 构造return Traversal(nums,0,nums.length-1);}public static TreeNode Traversal(int[] nums,int left,int right){// 终止条件if(left>right){return null;}int mid = (left+right)/2;TreeNode root = new TreeNode(nums[mid]);root.left = Traversal(nums,left,mid-1);root.right = Traversal(nums,mid+1,right);return root;}static List<List<Integer>> res = new ArrayList<>();public static List<List<Integer>> levelOrder(TreeNode root) {if(root==null){return res;}
// 队列Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(!queue.isEmpty()){int len = queue.size();List<Integer> path = new ArrayList<>();while(len>0){TreeNode nowNode = queue.poll();path.add(nowNode.val);if(nowNode.left!=null) queue.offer(nowNode.left);if(nowNode.right!=null) queue.offer(nowNode.right);len--;}res.add(new ArrayList<>(path));}return res;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入数组长度");int n  = sc.nextInt();int[] nums = new int[n];for(int i = 0 ; i < n ; i++){nums[i] = sc.nextInt();}TreeNode root = build(nums);levelOrder(root);System.out.println("结果是"+res.toString());}
}

http://www.mrgr.cn/news/8481.html

相关文章:

  • 命令模式基础教程:如何将请求封装成对象
  • Spring Boot(快速上手)
  • uniapp 向左滑动进入下一题,向右滑动进入上一题功能实现
  • Python实现分水岭图像分割算法
  • DHCP DNS 欺骗武器化——实用指南
  • Oracle(84)什么是SQL调优顾问(SQL Tuning Advisor)?
  • 自学网络安全的三个必经阶段(含路线图)
  • 使用PhaGCN2/vConTACT2进行病毒分类注释
  • 关于Linux中引用auto_gptq提示“CUDA extension not installed”
  • golang基本数据类型
  • 独角数卡,打开商品列表出现Undefined variable form的解决办法
  • FastAPI+Vue3零基础开发ERP系统项目实战课 20240824上课笔记 循环和函数以及大量的练习
  • python实用教程(二):安装配置Pycharm及使用(Win10)
  • Jmeter性能关注指标详解
  • 【嵌入式开发之网络编程】TCP端口和UDP端口
  • RISCV汇编讲解
  • 数据仓库系列 3:数据仓库的主要组成部分有哪些?
  • 【数模修炼之旅】05 拟合模型 深度解析(教程+代码)
  • 那些久远的开发语言(COBOL、Pascal、Perl等)还有市场吗
  • Metasploit漏洞利用系列(七):MSF渗透测试 - Bash Shellshock(破壳漏洞)实战