浏览 2101 次
锁定老帖子 主题:树形显示
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-17
/** 树形结构应用十分广泛。 下面这段代码根据用户添加的数据,在内存中构建一个逻辑上等价的树形结构。 通过ShowTree() 可以把它显示为控制中的样子。 其中: a.add('a', 'b'); a.add('b', 'e'); 表示:'b' 作为 'a' 的孩子节点;'e' 作为 'b'的孩子节点。 如代码中给出的示例数据,输出结果应该为: a--b--e | |--f--j | |--k |--c |--d--g--h |--i */ 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>(); map.put(parent, t); // } 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);//x的孩子节点的集合t 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));//递归t中每个元素的求他们的孩子节点 for(int j=0; j<ri.size(); j++) { String pre = "| "; if(j==0) { if(i==0) pre = x + "--"; else pre = "|--"; } else { if(i==ri.size()) // 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)); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |