2020软件工程作业04

|这个作业属于哪个课程|https://edu.cnblogs.com/campus/zswxy/2018SE|
| ---- | ---- | ---- |
|这个作业要求在哪里|https://edu.cnblogs.com/campus/zswxy/2018SE/homework/11406|
|这个作业的目标| 第一题:寻找数组中第K大的数,使用排序算法;第二题:二叉数的先、中、后序遍历与层级遍历,使用搜索算法。|
|其他参考文献|[经典算法题]寻找数组中第K大的数的方法总结 https://www.bbsmax.com/A/MAzAXmnpd9/|
第一题:寻找数组中第k大的数
解题思路

package suanfa;
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];
    a[0]=0;//使其他下标一致
    for (int i=1;i<=n ;i++) {
        a[i] = sc.nextInt();//输定给定的序列
    }
    int m=sc.nextInt();//输入要询问的个数
    for (int i=1;i<=m;i++) {
        int l =sc.nextInt();//输入从左往右第1个数
        int r =sc.nextInt();//输入从左往右第r个数
        int k =sc.nextInt();//输入指定K
        int[] temp=new int[r-1+2];//用于存放要排序的数的数组
        temp[0] = 0;
        int b = 1;
        for (int j =1; j<=r-1+1;j++) {//把排序的数转移到该数组
            temp[j]=a[b];
            b++;
        }
        Arrays.sort(temp);//调用sort函数啊排序
        System.out.println(temp[r-1+2-k]);//输入第k大的数
                 }
         }
    }

控制台输出效果

第二题:二叉树的先、中、后 序遍历与层级遍历
解题思路

package shu;

import java.util.LinkedList;

public class Main {
    /*
            作业要求:叉树的先、中、后 序遍历与层级遍历
            自己实现四个方法,main方法中调用,将结果打印到控制台
         */
    /*  二叉树的结构
                 A
                / \
               T   6
              /
             D
           /   \
          N     5
         / \    /
        B   4  1
             \
              9
     */
    public static void main(String[] args) {
        Node root = into();
        // 先序遍历
        A(root);
        System.out.println("前序");
        // 中序遍历
        B(root);
        System.out.println("中序");
        // 后序遍历
        C(root);
        System.out.println("后序");
        // 层级遍历
        D(root);
        System.out.println("层级");
    }

    private static void A(Node tree) {
        // TODO 先序遍历
        if (tree != null) {
            System.out.print(tree.data + " ");
            A(tree.l);
            A(tree.r);
        }

    }

    private static void B(Node tree) {
        // TODO 中序遍历
        if (tree != null) {
            B(tree.l);
            System.out.print(tree.data + " ");
            B(tree.r);
        }

    }

    private static void C(Node tree) {
        // TODO 后续遍历
        if (tree != null) {
            C(tree.l);
            C(tree.r);
            System.out.print(tree.data + " ");
        }

    }

    private static void D(Node tree) {
        // TODO 层级遍历
        if (tree != null) {
            LinkedList<Node> linkedList = new LinkedList<Node>();
            //先将根节点入队
            linkedList.offer(tree);
            Node node = null;
            while (!linkedList.isEmpty()) {
                node = (Node) linkedList.pop();
                System.out.print(node.data + " ");
                if (node.l != null) {
                    //将出队结点的左子树根入队
                    linkedList.offer(node.l);
                }
                if (node.r != null) {
                    //将出队结点的右子树根入队
                    linkedList.offer(node.r);
                }
            }
        }

    }

    // 构建一颗树,返回根节点
    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;
        }
    }
}

控制台输出效果

posted @ 2020-10-28 21:34  discoverthat  阅读(65)  评论(0编辑  收藏  举报