【算法】每日一练中的模拟计算器,二叉树开为链表

简介: 模拟计算器,二叉树开为链表

每天学习算法,一点一点积累。

这是书籍的二段文字
书中写到:数据结构+算法=程序,数据结构是程序的骨架,算法是程序的灵魂。
我觉得这一句话说的很对,程序有了灵魂才能更持久
在这里插入图片描述

算法题目描述

算法知识点如下
模拟计算器,类型:算法初阶,比较简单。
设计学生类和子类,类型:基础知识,比较简单。
二叉树开展为链表,类型:栈,树,中等难度。

第一题算模拟简单的计算器法题目描述

模拟简单的计算器。 要求:
(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 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
什么是先序遍历呢?解释如下:

需要实现如下:
示例 1:

输入: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;
            }
        }
    }
}
相关文章
|
2月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
51 0
|
1月前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
1月前
|
存储 缓存 算法
如何提高二叉树遍历算法的效率?
选择合适的遍历算法,如按层次遍历树时使用广度优先搜索(BFS),中序遍历二叉搜索树以获得有序序列。优化数据结构,如使用线索二叉树减少空指针判断,自定义节点类增加辅助信息。利用递归与非递归的特点,避免栈溢出问题。多线程并行遍历提高速度,注意线程安全。缓存中间结果,避免重复计算。预先计算并存储信息,提高遍历效率。综合运用这些方法,提高二叉树遍历算法的效率。
58 5
|
1月前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
41 0
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
2月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
|
2月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
|
2月前
|
算法 索引
经典算法之链表篇
经典算法之链表篇
|
2月前
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
18 1
下一篇
DataWorks