蓝桥杯2017国赛JAVAB组 树形显示 题解

2023-05-16


标题:树形显示

对于分类结构可以用树形来形象地表示。比如:文件系统就是典型的例子。

树中的结点具有父子关系。我们在显示的时候,把子项向右缩进(用空格,不是tab),并添加必要的连接线,以使其层次关系更醒目。

下面的代码就是为了这个目的的,请仔细阅读源码,并填写划线部分缺少的代码。


import java.util.*;

class MyTree
{
private Map<String, List<String>> map_ch = new HashMap<String, List<String>>();
private Map<String,String> map_pa = new HashMap<String,String>();

public void add(String parent, String child)
{
map_pa.put(child, parent);

List<String> lst = map_ch.get(parent);
if(lst==null){
lst = new ArrayList<String>();
map_ch.put(parent, lst);
}
lst.add(child);
}

public String get_parent(String me){
return map_pa.get(me);
}

public List<String> get_child(String me){
return map_ch.get(me);
}

private String space(int n)
{
String s = "";
for(int i=0; i<n; i++) s += ' ';
return s;
}

private boolean last_child(String x){
String pa = map_pa.get(x);
if(pa==null) return true;

List<String> lst = map_ch.get(pa);
return lst.get(lst.size()-1).equals(x);
}

public void show(String x){

String s = "+--" + x;

String pa = x;
while(true){
pa = map_pa.get(pa);
if(pa==null) break;
s = ___________________________________ ; // 填空
}

System.out.println(s);
}

public void dfs(String x){
show(x);

List<String> lst = map_ch.get(x);
if(lst==null) return;

for(String it: lst){
dfs(it);
}
}
}

public class TreeView
{
public static void main(String[] args)
{
MyTree tree = new MyTree();
tree.add("root", "dog");
tree.add("root", "cat");
tree.add("root", "duck");
tree.add("dog", "AAdog");
tree.add("dog", "BBdog");
tree.add("dog", "CCdog");
tree.add("AAdog", "AAdog01");
tree.add("AAdog", "AAdog02");
tree.add("cat", "XXcat");
tree.add("cat", "YYcat");
tree.add("XXcat","XXcat-oo");
tree.add("XXcat","XXcat-qq");
tree.add("XXcat-qq", "XXcat-qq-hahah");
tree.add("duck", "TTduck");
tree.add("TTduck", "TTduck-001");
tree.add("TTduck", "TTduck-002");
tree.add("TTduck", "TTduck-003");
tree.add("YYcat","YYcat.hello");
tree.add("YYcat","YYcat.yes");
tree.add("YYcat","YYcat.me");

tree.dfs("root");
}
}

对于题目中的测试数据,输出结果:
+--root
+--dog
| +--AAdog
| | +--AAdog01
| | +--AAdog02
| +--BBdog
| +--CCdog
+--cat
| +--XXcat
| | +--XXcat-oo
| | +--XXcat-qq
| | +--XXcat-qq-hahah
| +--YYcat
| +--YYcat.hello
| +--YYcat.yes
| +--YYcat.me
+--duck
+--TTduck
+--TTduck-001
+--TTduck-002
+--TTduck-003

如有平字体对齐问题,可以参见图【p1.png】

注意,只填写划线部分缺少的代码,不要抄写已有的代码或符号。

 


package 树形显示;

import java.util.*;

class MyTree
{
    private Map<String, List<String>>  map_ch = new HashMap<String, List<String>>();
    private Map<String,String> map_pa = new HashMap<String,String>();
    
    public void add(String parent, String child)
    {
        map_pa.put(child, parent);
        
        List<String> lst = map_ch.get(parent);
        if(lst==null){
            lst = new ArrayList<String>();
            map_ch.put(parent, lst);
        }
        lst.add(child);
    }
    
    public String get_parent(String me){
        return map_pa.get(me);
    }
    
    public List<String> get_child(String me){
        return map_ch.get(me);
    }
    
    private String space(int n)
    {
        String s = "";
        for(int i=0; i<n; i++) s += ' ';
        return s;
    }
    
    private boolean last_child(String x){
        String pa = map_pa.get(x);
        if(pa==null) return true;
        
        List<String> lst = map_ch.get(pa);
        return lst.get(lst.size()-1).equals(x);
    }
    
    public void show(String x){
        
        String s = "+--" + x;
        
        String pa = x;
        while(true){
            pa = map_pa.get(pa);
            if(pa==null) break;
            s = !last_child(pa) ? "|"+space(5)+s : space(5)+s; // 填空
        }
        
        System.out.println(s);
    }
    
    public void dfs(String x){
        show(x);
        
        List<String> lst = map_ch.get(x);
        if(lst==null) return;
                
        for(String it: lst){
            dfs(it);
        }
    }
}

public class Main
{
    public static void main(String[] args)
    {
        MyTree tree = new MyTree();
        tree.add("root", "dog");
        tree.add("root", "cat");
        tree.add("root", "duck");
        tree.add("dog", "AAdog");
        tree.add("dog", "BBdog");
        tree.add("dog", "CCdog");
        tree.add("AAdog", "AAdog01");
        tree.add("AAdog", "AAdog02");
        tree.add("cat", "XXcat");
        tree.add("cat", "YYcat");
        tree.add("XXcat","XXcat-oo");
        tree.add("XXcat","XXcat-qq");
        tree.add("XXcat-qq", "XXcat-qq-hahah");
        tree.add("duck", "TTduck");
        tree.add("TTduck", "TTduck-001");
        tree.add("TTduck", "TTduck-002");
        tree.add("TTduck", "TTduck-003");
        tree.add("YYcat","YYcat.hello");
        tree.add("YYcat","YYcat.yes");
        tree.add("YYcat","YYcat.me");        
        
        tree.dfs("root");
    }
}  

 

转载于:https://www.cnblogs.com/littleblue/p/10884976.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯2017国赛JAVAB组 树形显示 题解 的相关文章

  • Visual Studio 2017/2015远程调试Linux程序(opencv)

    liu
  • Visual Studio 2015/2017/2019 之通道清单未通过测试签名验证,以及正确安装证书详细过程

    Visual Studio 2015 2017 2019 之通道清单未通过测试签名验证 xff0c 以及正确安装证书详细过程 在安装之前都要进行证书安装 xff0c 否则会出现各种各样的错误 并且每个版本的证书都不一致 年份 企业版 社区版
  • 2017阿里校招内推面试回忆

    首先 我得声明 我经历了内推的四次电话面试 一直到hr面了 但是最后还是被挂了 所以 对大家的帮助可能不是那么大 如果大家对我这个失败者的经历不是很感兴趣的就不用往下看 后来校招的时候 笔试直接就挂了 我猜测是不是跟我之前内推失败的记录有关
  • B - Palindrome-phobia(CODE FESTIVAL 2017 Final)

    题目链接 https cf17 final open contest atcoder jp tasks cf17 final b 解题思路 通过找规律发现出现的次数最多的字符与其他两个字符数量的差不能大于1 AC代码 include lt
  • 【The 2017 BAPC】C题-Collatz Conjecture ---- GCD+优化去重

    题意 给你一个大小为n的序列 xff0c 让你求里面所有子串的GCD xff0c 求里面最多有多少不同的GCD 思路 xff1a 利用集合set tmp维护 到当前子串的最后一个元素的所有GCD xff0c set ans保存所有不同种类的
  • 我的2017-搭建个人网站,自拟定代码根目录

    wampserver集成安装环境安装的php的运行根目录在wamp文件夹中的www文件夹下 xff0c 而为了有效的将代码和服务器进行分离 xff0c 可以采用自拟定代码根目录进行修改 1 确定代码编辑位置 xff0c 修改服务器默认指向
  • 【Paper】2017_事件触发机制下的多智能体领导跟随一致性

    黄红伟 黄天民 事件触发机制下的多智能体领导跟随一致性 J 计算机工程与应用 2017 53 6 29 33 文章目录 2 预备知识及问题描述2 1 代数图论2 2 领导跟随一致性 3 主要结果3 1 集中式事件触发机制下的一致性对应程序
  • Luogu 3822 [NOI 2017] 整数

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 当年网同这道题还拿了 16 16 分 xff0c 现在一分都不会做了 xff0c 唉 xff0c 我太弱啦 xff01 这道题其实是很不错的 x
  • 2017-06-08 每日一记 sqlite3_bind_blob函数

    sqlite3函数 xff1a sqlite3 bind blob stat 1 pdata int length of data in bytes NULL 参数1 xff1a sqlte stmt 参数2 xff1a 的索引 xff0c
  • 蓝桥杯2017国赛JAVAB组 树形显示 题解

    标题 xff1a 树形显示 对于分类结构可以用树形来形象地表示 比如 xff1a 文件系统就是典型的例子 树中的结点具有父子关系 我们在显示的时候 xff0c 把子项向右缩进 xff08 用空格 xff0c 不是tab xff09 xff0
  • [算法]px4位置估计-inav (2017/10/26更新)

    技术交流 xff1a zinghd 64 163 com 757012902 64 qq com 转载标明出处 xff0c 欢迎转载 xff0c 因为都是自己的想法 xff0c 不一定都是对的 xff0c 欢迎讨论 xff0c 哪有问题欢迎
  • 2017论文阅读:Learning a Rotation Invariant Detector with Rotatable Bounding Box

    文章代码已开源 文章目录 文章贡献1 Rotatable bounding box2 Rotation invariant detection2 1 模型结构总览2 2 模型训练2 3 实现的细节 3 实验 amp 结果 文章贡献 提出了一
  • 蓝桥杯JavaB组2013年

    蓝桥杯JavaB组 2013年 3 振兴中华 入门dfs span class token comment 题目描述 xff1a 小明参加了学校的趣味运动会 xff0c 其中的一个项目是 xff1a 跳格子 地上画着一些格子 xff0c 每
  • 我的2017-搭建个人网站,hello PHP(2)

    学习一门语言 xff0c 例行惯例 xff0c 先来个 hello world 搭建好了php环境 xff0c 然后就可以运行php了 xff0c 首先用一种最简单的方法 xff0c 在wamp安装位置 xff08 相应的文件夹 xff09
  • 我的2017-搭建个人网站,自拟定代码根目录

    wampserver集成安装环境安装的php的运行根目录在wamp文件夹中的www文件夹下 xff0c 而为了有效的将代码和服务器进行分离 xff0c 可以采用自拟定代码根目录进行修改 1 确定代码编辑位置 xff0c 修改服务器默认指向
  • 过去的 2017 年

    过去的 2017 年分为两个部分 xff0c 前半部分偏忙碌 xff0c 个人时间较少 xff0c 但是收获甚微 xff1b 后半部分进入了一个学习的环境 xff0c 最主要的就是个人可自由支配的时间多了 xff0c 留给了我很多思考的时间
  • 2016晚安 2017你好

    不知不觉开通CSDN账号已有三年多的时间 xff0c 三年多以前抱着学习坚持的态度想要在CSDN上记录自己学习的点滴 结果三年多过去了 xff0c 2016年也随着过去了 xff0c 回顾2016年主要的三件事情就是 xff1a 1 从大学
  • Visual Studio 2017 代码自动对齐

    点 编辑 高级 设置选定内容的格式 或者按Ctrl 43 K 然后再按Ctrl 43 F 就好了 你可以在常用快捷键自定义 窗口中进行查看 1 进入工具 选项 对话框 2 选择 环境 键盘 3 在 显示命令包含 下面的对话框中输入 对齐 关
  • 2017年408专业算法题

    文章目录 0 结果1 题目2 思路附录 0 结果 1 题目 2 思路 因为要转换为中序表达式 xff0c 因此使用中序遍历 在中序遍历的过程中 xff0c 对于当前访问的非空结点p xff0c 则先输出 34 xff0c 然后递归调用左子树
  • 2017 ICM/MCM Problem E: Sustainable Cities Needed!

    题目理解可持续发展的城市 任务 References 题目理解 可持续发展的城市 许多社区正在实施智能增长计划 以考虑长期 可持续的规划目标 聪明的成长是关于帮助每个城镇和城市变成更加经济繁荣 社会公平和环境可持续的生活地方的意思 2 智能

随机推荐

  • Kotlin与Java互操作

    1 xff0c Kotlin 调用Java import java util fun demo source List lt Int gt val list 61 ArrayList lt Int gt for item in source
  • Oracle基础和进阶笔记第二篇

    Oracle的中级操作部分 六 索引1 索引的特点2 索引的创建 七 视图1 普通视图2 物化视图 八 序列1 序列创建语法 九 触发器1 触发器的语法2 替代触发器3 系统触发器 十 游标1 一般游标创建2 静态隐式游标3 静态显示游标4
  • Python 工匠:使用装饰器的技巧。

    作者 xff1a piglei xff08 本文来自作者投稿 xff09 前言 装饰器 xff08 Decorator xff09 是 Python 里的一种特殊工具 xff0c 它为我们提供了一种在函数外部修改函数的灵活能力 它有点像一顶
  • AI听6秒语音就能知道你的长相

    声音可以暴露很多讯息 xff0c 麻省理工学院 xff08 MIT xff09 最近一项研究发现 xff0c 经过训练的 AI 不仅能从声音辨别出性别 年龄和种族 xff0c 甚至能猜出这人大概长什么样子 这些 秘密 都藏不住了 研究人员用
  • selenium编程01-简单163邮箱登陆登出_模块化

    from selenium import webdriver from time import sleep class Login def init self driver self driver 61 driver def login s
  • 163music 反爬分析

    网易163 音乐的 mp3下载 view source https music 163 com playlist id 61 924680166 这个是网页源代码 链接 中间的 拿不到具体的数据 所以获取页面的时候 要去除 http mus
  • 二层链路聚合实验

    交换机1 xff1a ystem view vlan 10 vlan 20 qu interface range g1 0 1 to g1 0 2 port link type access port access vlan 10 qu i
  • plsql

    1 添加快捷键设置 摘抄自https www cnblogs com guangxiang p 9487132 html 汉化版 xff1a 工具 首选项 用户界面 编辑器 自动替换 定义文件 英文版 xff1a Tools gt Perf
  • 如何利用python制作微信好友头像照片墙?

    这个不难 xff0c 主要用到itchat和pillow这2个库 xff0c 其中itchat用于获取微信好友头像照片 xff0c pillow用于拼接头像生成一个照片墙 xff0c 下面我简单介绍一下实现过程 xff0c 代码量不多 xf
  • 软件需求工程与UML建模第二周工作总结

    项目范围 xff1a 1 能够实现仅弹道技能的躲避训练和带有技能发射主体的技能躲避训练 2 要能够玩家自由选择角色进行训练 3 要能够实现包含技能躲避 1v1对线训练等多模式选择的训练方式 4 要能够快捷进行多次练习 xff0c 我们计划加
  • 阻塞和非阻塞~

    很清楚 先记下 https www zhihu com question 19732473 answer 14413599 转载于 https www cnblogs com Mickey697 p 10863679 html
  • vnc利用ps命令查看所有DISPLAY

    ps aux grep vnc 使用该命令可以看到详细的vnc进程和使用的DISPLAY和DISPLAY的分辨率
  • 基础数据类型的补充,编码的进阶,基础数据类型之间的转换

    1 内容总览 基础数据类型的补充数据类型之间的转换 其他数据类型转成bool值为False的情况编码的进阶 2 具体内容 数据类型的补充 str 6个 code str xff1a 补充的方法练习一遍就行 6个 s1 61 39 taiBA
  • Keepalived

    Keepalived双机热备 Keepalived简介 Keepalived是使用C语言编写的路由热备软件 xff0c 该项目软件的主要目标是为Linux系统提供简单高效的负载均衡及高可用解决方案 负载均衡架构依赖于知名的IPVS xff0
  • Scyther 形式化分析工具资料整理(三)

    1 作者Cas Cremers在做TLS1 3的时候我么发现并没有使用Scyther 形式化丰分析工具对其进行分析 xff0c 而是使用了 The Tamarin 作者建立了TLS 13的模型 那么我的目标是 使用Scyther工具对TLS
  • java产生随机数的三种方式

    public class Test public static void main String args Random类 创建随机数对象有2种 一种是添加参数 也叫种子 这种方式创建出来的数 刷新后不会改变 相当于常量了 主要方法 nex
  • gcc 编译两个so其中soA依赖soB

    有两个so xff0c 其中soB中调用soA xff1b 那么我们打包soB的时候连接soA xff1b 在打包test程序的时候连接soB 此时soB会自动查找依赖的soA xff1b 如下测试 在编译之前指定环境变量 xff1a ex
  • Vue 循环 [Vue warn]: Avoid using non-primitive value as key

    页面中不添加 xff1a key 索引的时候 xff0c 会不停的提示虚线 xff0c 但不影响使用 后来加了一个索引 xff0c 加成了 key 61 34 content 34 从后台取出来的contents是一个list xff0c
  • 博客系统 01 登录退出

    一 工程搭建 使用的是IDEA xff08 1 xff09 新建个动态web工程 xff08 Blog xff09 xff08 2 xff09 导入jar包 xff08 SSH jar包 xff09 xff08 3 xff09 导入配置文件
  • 蓝桥杯2017国赛JAVAB组 树形显示 题解

    标题 xff1a 树形显示 对于分类结构可以用树形来形象地表示 比如 xff1a 文件系统就是典型的例子 树中的结点具有父子关系 我们在显示的时候 xff0c 把子项向右缩进 xff08 用空格 xff0c 不是tab xff09 xff0