剑指Offer之Java算法习题精讲N叉树的遍历及数组与字符串

 更新时间:2022年03月22日 17:06:38   作者:明天一定.  
跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化

题目一

N叉树题——前序遍历

根据给定的N叉树根节点,返回它节点值的前序遍历

具体题目如下

解法

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;
    public Node() {}
    public Node(int _val) {
        val = _val;
    }
    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/
 
class Solution {
    ArrayList<Integer> list = new ArrayList<Integer>();
    public List<Integer> preorder(Node root) {
        if (root == null) return list;
        list.add(root.val);
        for(int i=0;i<root.children.size();i++){
            preorder(root.children.get(i));
        }
        return list;
    }
}

题目二

N叉树题——后序遍历

根据给定的N叉树根节点,返回它节点值的后序遍历

具体题目如下

 解法

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;
    public Node() {}
    public Node(int _val) {
        val = _val;
    }
    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/
 
class Solution {
    ArrayList<Integer> list = new ArrayList<Integer>();
    public List<Integer> postorder(Node root) {
        if(root==null) return list;
        for(int i = 0;i<root.children.size();i++){
            postorder(root.children.get(i));
        }
        list.add(root.val);
        return list;
    }
}

题目三

二叉树题——创建字符串

根据给定的二叉树,采用前序遍历的方式并按指定条件将它转换为字符串

具体题目如下

解法

/**
 * Definition for a binary tree node.
 * public 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;
 *     }
 * }
 */
class Solution {
    public String tree2str(TreeNode root) {
        // root为空返回""
        if(root==null){
            return "";
        }
        // root左右为空
        if(root.left==null&&root.right==null){
            return root.val+"";
        }
        // root右为空
        if(root.right==null){
            return root.val+"("+tree2str(root.left)+")";
        }
        // root左右不空或是左不为空
        return root.val+"("+tree2str(root.left)+")"+"("+tree2str(root.right)+")";
    }
}

题目四

数组题——数组中三个数最大乘积

根据给定的整型数组,返回其中三个数组成的最大乘积

具体题目如下

解法

class Solution {
    public int maximumProduct(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length;
        // 拿到最大三个数,或者最小两个数和最大一个数
        int ans = Math.max(nums[n-1]*nums[n-2]*nums[n-3],nums[n-1]*nums[0]*nums[1]);
        return ans;
    }
}
 
// 拿到最大三个数,或者最小两个数和最大一个数
class Solution {
    public int maximumProduct(int[] nums) {
        // 最小的和第二小的
        int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
        // 最大的、第二大的和第三大的
        int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;
        for(int n:nums){
            if(n<min1){
                min2 = min1;
                min1 = n;
            }else if(n<min2){
                min2 = n;
            }
            if(n>max1){
                max3 = max2;
                max2 = max1;
                max1 = n;
            }else if(n>max2){
                max3 = max2;
                max2 = n;
            }else if(n>max3){
                max3 = n;
            }
        }
        return Math.max(min1*min2*max1,max1*max2*max3);
    }
}

到此这篇关于剑指Offer之Java算法习题精讲N叉树的遍历及数组与字符串的文章就介绍到这了,更多相关Java N叉树的遍历内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 将list集合数据按照时间字段排序的方法

    Java 将list集合数据按照时间字段排序的方法

    这篇文章主要介绍了Java 将list集合数据按照时间字段排序,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • SpringBoot拦截器实现对404和500等错误的拦截

    SpringBoot拦截器实现对404和500等错误的拦截

    本篇文章主要介绍了SpringBoot拦截器实现对404和500等错误的拦截,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • SpringBoot实现接口防刷的两种方法

    SpringBoot实现接口防刷的两种方法

    接口被刷指的是同一接口被频繁调用,可能是由于以下原因导致:恶意攻击和误操作或程序错误,本文给大家介绍了SpringBoot实现接口防刷的两种方法,并有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-06-06
  • 带你快速搞定java IO

    带你快速搞定java IO

    这篇文章主要介绍了Java IO流 文件传输基础的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下,希望能给你带来帮助
    2021-07-07
  • SpringBoot整合数据库访问层的实战

    SpringBoot整合数据库访问层的实战

    本文主要介绍了SpringBoot整合数据库访问层的实战,主要包含JdbcTemplate和mybatis框架的整合应用,具有一定的参考价值,感兴趣的可以了解一下
    2022-03-03
  • FeignClient支持运行时动态指定URL方式

    FeignClient支持运行时动态指定URL方式

    在实际开发中,我们经常通过FeignClient接口调用三方API,当面对不同的环境对应不同的地址时,可以通过配置文件和占位符来切换,但在同一个环境中需要调用不同地址的相同接口时,这种方法就失效了,此时,可以通过实现RequestInterceptor接口来动态切换地址
    2024-11-11
  • 以武侠形式理解Java LinkedList源码

    以武侠形式理解Java LinkedList源码

    链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址
    2021-11-11
  • 在IntelliJ IDEA中创建和运行java/scala/spark程序的方法

    在IntelliJ IDEA中创建和运行java/scala/spark程序的方法

    这篇文章主要介绍了在IntelliJ IDEA中创建和运行java/scala/spark程序的教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • SpringBoot项目中Controller接收两个实体的实现方法

    SpringBoot项目中Controller接收两个实体的实现方法

    本文主要介绍了SpringBoot项目中Controller接收两个实体的实现方法,主要介绍了两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Spring MVC温故而知新系列教程之从零开始

    Spring MVC温故而知新系列教程之从零开始

    Spring MVC 框架在 Java 的 Web 项目中应该是无人不知的吧,你不会搭建一个 Spring 框架?作为身为一个刚刚学习Java的我都会,如果你不会的话,那可真令人忧伤。下面这篇文章主要给大家介绍了关于Spring MVC从零开始的相关资料,需要的朋友可以参考下
    2018-05-05

最新评论