当前位置:主页 > 软件编程 > JAVA代码 >

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

时间:2023-01-27 10:13:38 | 栏目:JAVA代码 | 点击:

题目一

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);
    }
}

您可能感兴趣的文章:

相关文章