通过java 程序完成简单的树形结构

首先需要理解集合 根节点和子节点的概念

推荐链接看不懂的话,就多看几遍,好好理解

  • 以下是代码,建议自己手敲一遍加深理解,学会类比

  1. Staff类

public abstract class Staff {
    // 员工号
    protected String no;
    // 职工名字
    protected String name;
    // 职位
    protected String position;
    // 薪资
    protected float salary;
    // 私有属性 长度字符串
    private int length;
    // 构造方法
    public Staff(String no, String name, String position, float salary) {
        this.no = no;
        this.name = name;
        this.position = position;
        this.salary = salary;
        // 计算总字节长度
        this.length += (no == null || "".equals(no.trim())) ? 0
                : no.getBytes().length;
        this.length += (name == null || "".equals(name.trim())) ? 0 : name
                .getBytes().length;
        this.length += (position == null || "".equals(position.trim())) ? 0
                : position.getBytes().length;
        this.length += String.valueOf(salary).getBytes().length;
    }
    // 获得用户基本信息
    public void printUserBaseInfo() {
        System.out.println("|" + this.no + " " + this.name + " "
                + this.position + " " + this.salary);
    }
    // 添加员工信息
    public abstract void add(Staff staff);
    // 删除员工
    public abstract Staff remove(String no);
    // 打印员工信息
    public abstract void printEmployeesInfo(int layer);
    // 打印若干字符
    protected void printChar(int layer) {
        for (int j = 0; j < layer * 2; j++) {
            System.out.print("-");
        }
    }
    // 私有方法打印一行
    protected void printLine() {
        System.out.print("+");
        for (int i = 0; i < this.length + 4; i++) {
            System.out.print("-");
        }
        System.out.println("-");
    }
    public String getNo() {
        return no;
    }
    public void setNo(String no) {
        this.no = no;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPosition() {
        return position;
    }
    public void setPosition(String position) {
        this.position = position;
    }
    public float getSalary() {
        return salary;
    }
    public void setSalary(float salary) {
        this.salary = salary;
    }
}
​
  1. Employees类

public class Employees extends Staff{
    // 构造方法
    public Employees(String no, String name, String position, float salary)
    {
        super(no, name, position, salary);
    }
    /**
     * 添加员工信息
     */
    @Override
    public void add(Staff staff)
    {
        return;
    }
    /**
     * 删除员工信息
     */
    @Override
    public Staff remove(String no)
    {
        // 直接返回null
        return null;
    }
    /**
     * 打印员工信息
     */
    @Override
    public void printEmployeesInfo(int layer)
    {
        return;
    }
}
​
  1. Manage类

import java.util.ArrayList;
​
public class Manager extends Staff {
    // 存储手下员工信息
    private final ArrayList<Staff> arrayList = new ArrayList<Staff>();
    // 构造方法
    public Manager(String no, String name, String position, float salary) {
        super(no, name, position, salary);
    }
    /**
     * 增加一个员工
     */
    @Override
    public void add(Staff staff) {
        this.arrayList.add(staff);
    }
    /**
     * 删除员工信息
     */
    @Override
    public Staff remove(String no) {
        Staff staff = null;
        if (no != null && !"".equals(no.trim())) {
            for (int i = 0; i < this.arrayList.size(); i++) {
                if (this.arrayList.get(i) == null) {
                    continue;
                }
                if (no.equals(this.arrayList.get(i).getNo())) {
                    staff = this.arrayList.remove(i);
                    break;
                }
            }
        }
        return staff;
    }
    /**
     * 打印员工信息
     */
    @Override
    public void printEmployeesInfo(int layer) {
        int tmpLayer = ++layer;
        for (int i = 0; i < this.arrayList.size(); i++) {
            if (this.arrayList.get(i) == null) {
                continue;
            }
            // 打印'-'
            printChar(tmpLayer);
            // 打印员工基本信息
            this.arrayList.get(i).printUserBaseInfo();
            // 打印手下员工信息
            this.arrayList.get(i).printEmployeesInfo(tmpLayer);
        }
    }
}
​
  1. Client测试类

​
public class Client {
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // 公司CEO
        Staff boss = new Manager("1", "大老板", "CEO", 100000);
        /**
         * CEO手下有若干部门经理
         */
        // 财务部经理
        Staff financeManager = new Manager("11", "张总", "财务部经理", 60000);
        // 人事部经理
        Staff personnelManager = new Manager("12", "王总", "人事部经理", 60000);
        // 技术部经理
        Staff technicalManager = new Manager("13", "陈总", "技术部经理", 60000);
        /**
         * 技术部门还有助理和若干主管
         */
        // 技术部门助理
        Staff deptAssistant = new Manager("1301", "王助理", "部门助理", 20000);
        // 技术部门主管1
        Staff deptManager1 = new Manager("1302", "主管1", "技术主管", 30000);
        /**
         * 技术主管deptManager1 下面还有软件工程师(最终干活的人)
         */
        Staff softwareEngineer1 = new Employees("1302001", "张三", "软件工程师", 5000);
        Staff softwareEngineer2 = new Employees("1302002", "李四", "软件工程师", 5500);
        Staff softwareEngineer3 = new Employees("1302003", "王五", "软件工程师", 4500);
        // 为技术主管1添加员工信息
        deptManager1.add(softwareEngineer1);
        deptManager1.add(softwareEngineer2);
        deptManager1.add(softwareEngineer3);
        // 技术部门主管2
        Staff deptManager2 = new Manager("1303", "主管2", "技术主管", 30000);
        // 为技术部经理 添加:部门助理、技术主管1和技术主管2
        technicalManager.add(deptAssistant);
        technicalManager.add(deptManager1);
        technicalManager.add(deptManager2);
        // 市场部经理
        Staff marketingManager = new Manager("14", "吴总", "市场部经理", 60000);
        // 为CEO 添加:财务部经理、人事部经理、技术部经理和市场部经理
        boss.add(financeManager);
        boss.add(personnelManager);
        boss.add(technicalManager);
        boss.add(marketingManager);
        // 打印CEO 信息
        boss.printUserBaseInfo();
        // 打印CEO 手下员工信息
        boss.printEmployeesInfo(1);
    }
}
​

以上代码会跑出以下的结果:

补一句  理解挂值的思想:

TreeNode treeA = new TreeNode("A");
treeA.add(new TreeNode("B"));
treeA.add(new TreeNode("C"));

TreeNode treeNodeD = new TreeNode("D");
treeNodeD.add(new TreeNode("D1"));
treeNodeD.add(new TreeNode("D2"));
treeA.add(treeNodeD);
print(treeA);

这里面是把A放在根节点,在A的基础上新增加子节点B、C,

treeA.add(treeNodeD) ;这一句是将D挂在A的根节点上这样,就相当于A根节点下有A、B、C三个根节点,将D1、D2挂在D下面,这样就形成了三层。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值