树形显示


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

余额充值