打印树状结构

package cn.itcast.oa.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import org.junit.Test;

import cn.itcast.oa.domain.Department;

/**
 * 说明:不能使用多层循环的方式,因为需要能支持任意层。
 */
public class TreeViewPractice {

	/**
	 * 练习一:打印所有顶层部门及其子孙部门的信息(名称) 提示:假设有一个 打印部门树 的信息 的方法
	 * 
	 * 要求打印如下效果:
	 * 
	 * <pre>
	 * 市场部
	 * 市场1部
	 * 市场2部
	 * 21
	 * 22
	 * 开发部 
	 * 开发1部
	 * 开发2部
	 * </pre>
	 */
	@Test
	public void printAllDepts_1() {
		List<Department> topList = findTopLevelDepartmentList();

		// // 方式一:
		 for (Department top : topList) {
			 printTree(top);
		 }

		// 方式二:
		//printTreeList(topList);
	}

	// 方式一:显示一颗以top为顶点的部门树的信息(显示所有的节点名称)
	private void printTree(Department top) {
		// 1个顶点
		System.out.println(top.getName());

		// 0或多个子树
		for (Department child : top.getChildren()) {
			printTree(child);
		}
	}

	// 方式二:显示一堆树的信息
	private void printTreeList(Collection<Department> topList) {
		for (Department top : topList) {
			// 1个顶点
			System.out.println(top.getName());

			// 0或多个子树
			printTreeList(top.getChildren());
		}
	}

	/**
	 * 练习二:打印所有顶层部门及其子孙部门的信息(名称),用不同的缩进表示层次(使用全角空格)。<br>
	 * 子部门的名称前比上级部门多一个空格,最顶层部门的名字前没有空格。 提示:假设有一个打印部门集合中所有部门信息的方法
	 * 
	 * 要求打印如下效果:
	 * 
	 * <pre>
	 * ┠市场部
	 *      ┠市场1部
	 *      ┠市场2部
	 *      ┠21
	 *      ┠22
	 * ┠开发部
	 *      ┠开发1部
	 *      ┠开发2部
	 * </pre>
	 */
	@Test
	public void printAllDepts_2() {
		List<Department> topList = findTopLevelDepartmentList();

		printTreeList_2(topList, "┣");
	}

	// 显示一堆树的信息,并且名称前有空格
	private void printTreeList_2(Collection<Department> topList, String prefix) {
		for (Department top : topList) {
			// 1个顶点
			System.out.println(prefix + top.getName());

			// 0或多个子树
			printTreeList_2(top.getChildren(), " " + prefix);
		}
	}

	/**
	 * 结构如下:
	 * 
	 * <pre>
	 * ┠市场部
	 *      ┠市场1部
	 *      ┠市场2部
	 *       ┠21
	 *       ┠22
	 * ┠开发部
	 *      ┠开发1部
	 *      ┠开发2部
	 * </pre>
	 * 
	 * @return 所有最顶层的部门的列表
	 */
	public static List<Department> findTopLevelDepartmentList() {
		Department dept_1_1 = new Department();
		dept_1_1.setId(new Long(11));
		dept_1_1.setName("市场1部");

		Department dept_1_2 = new Department();
		dept_1_2.setId(new Long(12));
		dept_1_2.setName("市场2部");

		Department dept_1_2_1 = new Department();
		dept_1_2_1.setId(new Long(121));
		dept_1_2_1.setName("21");

		Department dept_1_2_2 = new Department();
		dept_1_2_2.setId(new Long(122));
		dept_1_2_2.setName("22");

		dept_1_2_1.setParent(dept_1_2);
		dept_1_2_2.setParent(dept_1_2);
		Set<Department> children_0 = new LinkedHashSet<Department>();
		children_0.add(dept_1_2_1);
		children_0.add(dept_1_2_2);
		dept_1_2.setChildren(children_0);

		// ================================

		Department dept_1 = new Department();
		dept_1.setId(new Long(1));
		dept_1.setName("市场部");

		dept_1_1.setParent(dept_1);
		dept_1_2.setParent(dept_1);
		Set<Department> children_1 = new LinkedHashSet<Department>();
		children_1.add(dept_1_1);
		children_1.add(dept_1_2);
		dept_1.setChildren(children_1);

		// ---

		Department dept_2_1 = new Department();
		dept_2_1.setId(new Long(21));
		dept_2_1.setName("开发1部");

		Department dept_2_2 = new Department();
		dept_2_2.setId((new Long(22)));
		dept_2_2.setName("开发2部");

		Department dept_2 = new Department();
		dept_2.setId(new Long(2));
		dept_2.setName("开发部");

		dept_2_1.setParent(dept_2);
		dept_2_2.setParent(dept_2);
		Set<Department> children_2 = new LinkedHashSet<Department>();
		children_2.add(dept_2_1);
		children_2.add(dept_2_2);
		dept_2.setChildren(children_2);

		// ---

		List<Department> depts = new ArrayList<Department>();
		depts.add(dept_1);
		depts.add(dept_2);
		
		
		return depts;
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值