剑指Offer之Java算法习题精讲N叉树的遍历及数组与字符串
题目一
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叉树的遍历内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
IDEA Error:java: 无效的源发行版: 17错误
本文主要介绍了IDEA Error:java: 无效的源发行版: 17错误,这个错误是因为您的IDEA编译器不支持Java 17版本,您需要更新您的IDEA编译器或者将您的Java版本降级到IDEA支持的版本,本文就来详细的介绍一下2023-08-08
详解使用JavaMailSender给曾经心爱的她再中秋发送一封特别的邮件
网站的服务端向用户发邮件时,邮件中往往需要携带图片,链接等内容。所以为了方便起见,我们一般发送HTML格式的邮件,那么怎么去拼一个HTML格式的邮件呢?——Thymeleaf。开始之前,先新建一个SpringBoot项目,并添加需要用到的依赖。然后就可以继续往下了2022-09-09
Java Thread.currentThread().getName() 和 this.getName()区别详
本文主要介绍了Thread.currentThread().getName() 和 this.getName()区别详解,TestThread testThread = new TestThread();2022-02-02


最新评论