树形显示
/*
题目:树形显示
内容:
树形结构应用十分广泛。
下面这段代码根据用户添加的数据,在内存中构建一个逻辑上等价的树形结构。
通过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(最多只能有一个这样的映射关系)。
*/