当前位置 : 主页 > 编程语言 > java >

【算法】算法题目三道模拟计算器,设计学生类和子类,二叉树开为链表

来源:互联网 收集:自由互联 发布时间:2022-10-26
算法题目描述 算法知识点如下: 模拟计算器,类型:算法初阶,比较简单。 设计学生类和子类,类型:基础知识,比较简单。 二叉树开展为链表,类型:栈,树,中等难度。 第一题

【算法】算法题目三道模拟计算器,设计学生类和子类,二叉树开为链表_java

算法题目描述

算法知识点如下:

模拟计算器,类型:算法初阶,比较简单。

设计学生类和子类,类型:基础知识,比较简单。

二叉树开展为链表,类型:栈,树,中等难度。

第一题算法题目描述

模拟简单的计算器。 要求:

(1)定义名为Number的类,在其中定义两个私有的整型数据成员n1和n2;

(2)在Number类中编写构造方法,赋予n1和n2初始值;

(3)再为Number类定义加(addition)、减(subtration)、乘(multiplication)、除(division)四个公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。注意:除法运算时要抛出除数为0的异常。

(4)在主方法中创建Number类的对象,调用上述各个方法,测试并输出计算结果,注意进行必要的异常捕获与处理。

Java解答参考思路

public class Number {
private int n1;
private int n2;
public Number(int n1, int n2) {
this.n1 = n1;
this.n2 = n2;
}
public int addition() {
return n1 + n2;
}
public int subtration() {
return n1 - n2;
}
public int multiplication() {
return n1 * n2;
}
private int division() {
if (n2 == 0) {
throw new IllegalArgumentException("除数参数不合法");
}
return n1 / n2;
}
public static void main(String[] args) {
Number number = new Number(6, 0);
System.out.println(number.addition());
System.out.println(number.subtration());
System.out.println(number.multiplication());
try {
System.out.println(number.division());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

第二题算法题目描述

设计一个学生类Student和它的一个子类Undergraduate,要求如下:

(1)Student类有name和age属性,一个包含两个人参数的构造器,用于给两属性赋值,一个show()方法打印Student的属性信息。

(2)本科生类Undergraduate增加一个degree(学位)属性。有一个包含三参数的构造器,前两个参数用于给集成的属性赋值,第三个参数给degree专业见值,一个show()方法用于打印Undergraduate的属性信息。

(3)在测试类中分别打印Undergraduate和Student对象,调用它们的show()

Java解答参考思路

public class test {
public static void main(String[] args) {
Student stu = new Student("student", 100);
stu.show();
Undergraduate undergraduate = new Undergraduate("Undergraduate", 20, "本科");
undergraduate.show();
}
}
class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void show() {
System.out.println("名字:" + this.name + "\t年龄:" + this.age);
}
}
class Undergraduate extends Student {
private String degree;
public Undergraduate(String name, int age, String degree) {
super(name, age);
this.degree = degree;
}
public void show() {
System.out.println("名字:" + super.getName() + "\t年龄:" + super.getAge() + "\t学位:" + this.degree);
}
}

第三题算法题目描述

给你二叉树的根结点 root ,请你将它展开为一个单链表:

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。

什么是先序遍历呢?解释如下:

【算法】算法题目三道模拟计算器,设计学生类和子类,二叉树开为链表_结点_02

需要实现下面的例子:

【算法】算法题目三道模拟计算器,设计学生类和子类,二叉树开为链表_java_03

输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6]

示例 2: 输入:root = [] 输出:[]

示例 3: 输入:root = [0] 输出:[0]

提示: 树中结点数在范围 [0, 2000] 内 -100 <= Node.val <= 100

进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗?

Java解答思路

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
class Solution {
public void flatten(TreeNode root) {
while (root != null) {
if (root.left == null)
root = root.right;
else {
TreeNode pre = root.left;
while (pre.right != null)
pre = pre.right;
pre.right = root.right;
root.right = root.left;
root.left = null;
root = root.right;
}
}
}
}
上一篇:SpringBoot2.0上启动RPC框架RNF2.0已发布
下一篇:没有了
网友评论