标题:树形显示

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

树中的结点具有父子关系。我们在显示的时候,把子项向右缩进(用空格,不是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】

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

解析:dfs找儿子  然后show函数输出   show 的while的作用是找这个儿子是root的第几代   从x往上找 所以加在前面  若p不是root 则+ ”| “ 若pa是root 则+” “

答案: (pa.compareTo("root") == 0?" ":"| ") + s     纯属个人答案 不喜勿喷

最新文章

  1. jquery easyui 动态绑定数据列
  2. java socket 网络编程常见异常
  3. Leetcode 77, Combinations
  4. Linux 底下使用C语言的 单链表 ,双链表,二叉树 读取文件,并排序
  5. Asp.net 头像的简单实现
  6. 集成 AliPay - 支付宝
  7. 01-01-01【Nhibernate (版本3.3.1.4000) 出入江湖】配置文件
  8. [Irving] Wpf DevexPress GridControl 获取选中行
  9. IOS Objective-C 协议,委托
  10. ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环
  11. 企业业务数据处理用“work”还是“MQ”
  12. DNS服务器的搭建
  13. vmware-vcsa6.5 基本管理
  14. css新单位vw,vh在响应式设计中的应用
  15. 1. Spring基于xml加载和读取properties文件配置
  16. [NOIP 2015TG D1T3] 斗地主
  17. 记一次揪心的MySQL数据恢复过程
  18. 重学C语言---02C语言概述
  19. JS参差不齐的数组
  20. linux 基本配置tab键和显示行号 和中文输入法

热门文章

  1. [02] URL和HttpURLConnection类
  2. 5个python爬虫教材,让小白也有爬虫可写,含视频教程!
  3. sprintf()函数用法
  4. 为什么建议php字符串使用单引号而不是双引号
  5. 窥看 SpringBoot 的原理与使用
  6. odoo11 访问web/database/manager管理数据库页面布局混乱问题
  7. LeetCode Search Insert Position (二分查找)
  8. CSS 边框(border)实例
  9. 第八次Scrum meeting
  10. LINUX第三次实践:程序破解