用递归实现的Tree之二





	// "└" "├ "│" "+"
	private List<Course> l = new ArrayList<Course>();
	private boolean[] aryNodeStatus = new boolean[100];
	private void tree(Integer cid, Integer level,boolean[] aryIsLastNode) {
		int index = 0;
		List<Course> list = (List<Course>) coursedao.findByPid(cid);

		for (Course t : list) {
			/*
			 * System.out.println("-----list:" + list.toString());
			 * System.out.println("-----t:" + t);
			 * System.out.println("-----list.size():" + list.size());
			 */

			String symbol = "";
			String symbolf = "";
			index++;

			// System.out.println("-----index:" + index);
			
				// 先画上级节点延续下来的"|"+空格,空格具体数目由层数决定
				//System.out.println("-----level:" + level);
				for (int lev = 0; lev < level; lev++) {
					if(aryIsLastNode[lev]==false)
					symbolf += "│";
					else
					symbolf += "   ";
				}
				// 是否为最后一个节点
				if (index == list.size()) {
					symbol = "└";

				} else {
					symbol = "├";

				}
			
				

			String cname = symbolf + symbol + t.getCname();
			t.setCname(cname);
		//	System.out.println("-----t:" + t.getCname());

			if (t.getLeaf() == 0) {

				l.add(t);
				// t.setLeveler(level + 1);
				// tree(t.getId(),
				// t.getLeveler(),index==list.size()?true:false);
				
			} else {

				l.add(t);
				t.setLevel(level + 1);
				if(index==list.size()){
					aryIsLastNode[level]=true;
				}
				else{
					aryIsLastNode[level]=false;
				}
				tree(t.getCid(), t.getLevel(),aryIsLastNode);
			}
		}

	}

	public List<Course> showTree() {
		l.clear();
		List<Course> list = (List<Course>) coursedao.findByPid(0);
		for (Course t : list) {
			if (t.getLeaf() != 0) {
				l.add(t);
				aryNodeStatus[0]=true;
				this.tree(t.getCid(), 0, aryNodeStatus);
			} else {
				l.add(t);
			}
		}
		return l;
		
	}







你可能感兴趣的:(tree)