剑指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叉树的遍历内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
深入分析Comparable与Comparator及Clonable三个Java接口
接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义,这篇文章主要为大家详细介绍了Java的Comparable,Comparator和Cloneable的接口,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助2022-05-05SSH框架网上商城项目第18战之过滤器实现购物登录功能的判断
这篇文章主要为大家详细介绍了SSH框架网上商城项目第18战:过滤器实现购物登录功能的判断,感兴趣的小伙伴们可以参考一下2016-06-061秒钟实现Springboot 替换/写入 word文档里面的文字、图片功能
这篇文章主要介绍了Springboot 替换/写入 word文档里面的文字、图片,1秒钟实现,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下2022-12-12解决mybatis使用foreach批量insert异常的问题
这篇文章主要介绍了解决mybatis使用foreach批量insert异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-01-01
最新评论