树形显示

/**
树形结构应用十分广泛。
下面这段代码根据用户添加的数据,在内存中构建一个逻辑上等价的树形结构。
通过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));
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值