数据结构与算法应用(十四):树形显示——蓝桥杯2011年Java决赛

16 篇文章 0 订阅
10 篇文章 0 订阅

树形结构应用十分广泛。

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

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

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

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

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

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); // 填空1
		}
		t.add(child);
	}

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

public class Main {
	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 == 1) // 填空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));
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值