树形显示

 

/*
题目:树形显示
内容:
树形结构应用十分广泛。

下面这段代码根据用户添加的数据,在内存中构建一个逻辑上等价的树形结构。

通过ShowTree() 可以把它显示为控制中的样子。

其中:
a.add('a', 'b');
a.add('b', 'e');
表示:'b' 作为 'a' 的孩子节点;'e' 作为 'b'的孩子节点。
如代码中给出的示例数据,输出结果应该为:

a--b--e
| |--f--j
| |--k
|--c
|--d--g--h
|--i


请阅读下面的代码,填写缺失的部分(下划线部分)。

注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
直接写在题面中不能得分。

import java.util.*;

class MyTree
{
private Map map = new HashMap();

public void add(char parent, char child)
{
List<Character> t = (List<Character>)map.get(parent);
if(t==null)
{
t = new Vector<Character>();
____________________; // 填空1
}
t.add(child);
}

public List<Character> getChild(char x)
{
return (List<Character>)map.get(x);
}
}

public class My
{
public static List<String> showTree(MyTree tree, char x)
{
List<Character> t = tree.getChild(x);

List<String> r = new Vector<String>();

if(t==null)
{
r.add("" + x);
return r;
}

for(int i=0; i<t.size(); i++)
{
List<String> ri = showTree(tree, t.get(i));
for(int j=0; j<ri.size(); j++)
{
String pre = "| ";
if(j==0)
{
if(i==0)
pre = x + "--";
else
pre = "|--";
}
else
{
if(i==__________________) // 填空2
pre = " ";
else
pre = "| ";
}

r.add(pre + ri.get(j));
}
}

return r;
}

public static void main(String[] args)
{
MyTree a = new MyTree();
a.add('a', 'b');
a.add('b', 'e');
a.add('b', 'f');
a.add('a', 'c');
a.add('a', 'd');
a.add('d', 'g');
a.add('d', 'i');
a.add('g', 'h');
a.add('f', 'j');
a.add('f', 'k');

List<String> lst = showTree(a, 'a');
for(int i=0; i<lst.size(); i++)
{
System.out.println(lst.get(i));
}
}
}
*/

 1 import java.util.HashMap;
 2 import java.util.List;
 3 import java.util.Map;
 4 import java.util.Vector;
 5 
 6 class MyTree
 7 {
 8     private Map map = new HashMap();//定义了一个变量,map
 9     
10     public void add(char parent, char child)//写了一个方法,add,
11     {
12         List<Character> t = (List<Character>)map.get(parent);
13         if(t==null)
14         {
15             t = new Vector<Character>();
16             map.put(parent, t);  // 填空1
17         }
18         t.add(child);
19     }
20     
21     public List<Character> getChild(char x)
22     {
23         return (List<Character>)map.get(x);
24     }
25 }
26 
27 public class My
28 {
29     public static List<String> showTree(MyTree tree, char x)//这里为什么要两个参数?
30     {
31         List<Character> t = tree.getChild(x);//这里存的是Character
32         
33         List<String> r = new Vector<String>();//这里存的是String
34         
35         if(t==null)//这句是废话,
36         {
37             r.add("" + x);
38             return r;//返回的是String
39         }
40                 
41         for(int i=0; i<t.size(); i++)//主要看这里的循环,
42         {
43             List<String> ri = showTree(tree, t.get(i));//擦,递归了,
44             for(int j=0; j<ri.size(); j++)
45             {
46                 String pre = "|  ";
47                 if(j==0)
48                 {
49                     if(i==0)
50                         pre = x + "--";
51                     else 
52                         pre = "|--";
53                 }
54                 else
55                 {
56                     if(i==t.size()-1)    // 填空2
57                         pre = "   ";
58                     else
59                         pre = "|  ";
60                 }
61                 
62                 r.add(pre + ri.get(j));
63             }
64         }
65         
66         return r;//返回String
67     }
68     
69     public static void main(String[] args)
70     {
71         MyTree a = new MyTree();
72         a.add('a', 'b');
73         a.add('b', 'e');
74         a.add('b', 'f');
75         a.add('a', 'c');
76         a.add('a', 'd');
77         a.add('d', 'g');
78         a.add('d', 'i');
79         a.add('g', 'h');
80         a.add('f', 'j');
81         a.add('f', 'k');
82         
83         List<String> lst = showTree(a, 'a');
84         for(int i=0; i<lst.size(); i++)
85         {
86             System.out.println(lst.get(i));
87         }
88     }
89 }

/*
* 数据结构没学好,只能抄抄答案了,,,,
V get(Object key)
返回此映射中映射到指定键的值。如果此映射中没有该键的映射关系,则返回 null。返回 null 值并非一定 表明此映射不包含该键的映射关系;也可能此映射将该键显示地映射到 null。可使用 containsKey 操作来区分这两种情况。
更正式地说,如果此映射包含满足以下从键 k 到值 v 的映射关系:(key==null ? k==null :key.equals(k)),则此方法返回 v;否则返回 null(最多只能有一个这样的映射关系)。


*/

原文地址:https://www.cnblogs.com/wsxjbky/p/3059010.html