2020软件工程作业04
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/2018SE/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/2018SE/homework/11406 |
这个作业的目标 | <认识算法和数据结构> |
其他参考文献 | <博客园 ,百度> |
一.题目名称
用排序算法找数组中第K大的数
· 解题思路
1.首先就是定义一个数组
2.输入数组元素到其中
3.使用for循环,来获取每次输入的数组数
4.输出
· 代码
package hm;
import java.math.BigInteger;`
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n+1];
for(int i = 1 ; i <= n ; i++ ){
a[i] = sc.nextInt();
}
int m = sc.nextInt();
while(m-->0){
int l = sc.nextInt();
int r = sc.nextInt();
int k = sc.nextInt();
int[] b = new int[r-l+2];
int len = r - l + 1 ;
for(int i = 1 ; i <=len;i++){
b[i] = a[l];
l++;
}
Arrays.sort(b);
System.out.println(b[b.length-k]);
}
}
}
· 运行结果
第二题
· 题目名称
二叉树的先、中、后 序遍历与层级遍历 考察算法: dfs + bfs搜索算法
· 解题思路
先序遍历:首先访问根节点,再访问左子树的根,最后访问右子树的根。
中序遍历:首先访问左子树,然后访问根节点,最后再访问右子树。
后序遍历:首先访问左子树,然后访问右子树,最后访问根节点。
层次遍历:每一层从左到右遍历,读出数据,从左子树到右子树依次进行。
· 代码
package hm;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
/*
作业要求:叉树的先、中、后 序遍历与层级遍历
自己实现四个方法,main方法中调用,将结果打印到控制台
*/
/* 二叉树的结构
A
/ \
T 6
/
D
/ \
N 5
/ \ /
B 4 1
\
9
*/
Node root = into();
// 先序遍历;
A(root);
System.out.println();
System.out.println("先序遍历") ;
// 中序遍历
B(root);
System.out.println();
System.out.println("中序遍历");
// 后续遍历
C(root);
System.out.println();
System.out.println("后序遍历");
// 层级遍历
D(root);
System.out.println();
System.out.println("层级遍历");
}
private static void A(Node root) {
// TODO 先序遍历
if (root == null) return;
System.out.print(root.data +" ");
A(root.l);
A(root.r);
}
private static void B(Node root) {
// TODO 中序遍历
if (root == null) return;
B(root.l);
System.out.print(root.data+" ");
B(root.r);
}
private static void C(Node root) {
// TODO 后续遍历
if (root == null) return;
C(root.l);
C(root.r);
System.out.print(root.data +" ");
}
private static void D(Node root) {
// TODO 层级遍历
LinkedList<Node> list= new LinkedList<>();
list.add(root);
while(! list.isEmpty()) {
Node ww=list.pop();
if(ww.l !=null) {
list.offer(ww.l);
}
if(ww.r !=null) {
list.offer(ww.r);
}
System.out.print(ww.data +" ");
}
}
// 构建一颗树,返回根节点
private static Node into(){
Node root = new Node("A");
Node node1 = new Node("T");
Node node2 = new Node("D");
Node node3 = new Node("N");
Node node4 = new Node("B");
Node node5 = new Node("6");
Node node6 = new Node("5");
Node node7 = new Node("4");
Node node8 = new Node("9");
Node node9 = new Node("1");
root.l = node1;
node1.l = node2;
node2.l = node3;
node2.r = node6;
node3.r = node7;
node7.r = node8;
node6.l = node9;
node3.l = node4;
root.r = node5;
return root;
}
// 节点
static class Node{
// 数据
Object data;
// 左孩子
Node l;
// 右孩子
Node r;
public Node(){}
public Node(Object data) {
this.data = data;
this.l = null;
this.r = null;
}
public Node(Object data, Node l, Node r) {
this.data = data;
this.l = l;
this.r = r;
}
}
}