这道题来自于公司的一道面试题
1、数据库中有一张表
2、输出到控制台
3、从这道题的表接口和输出看,使用递归做最为合理,很多面试者也用递归输出了全部数据,却倒在了每条数据前的空格上,仔细想一下,空格代表的其实是递归的路径。
4、遍历的时候路径有来有回,我们用成员变量来存储递归的次数,向下时+1,当递归结束返回时-1,就能得到正确的空格。实体映射和数据库连接代码就不贴出来了。
public class Test {
private int count = 0;
public void getTree(int parentNo) throws SQLException {
List<Department> list = TreeTest.query(parentNo);
for (Department department : list) {
count++;
System.out.println(buildSpace(count)+department.toString());
this.getTree(department.getDepartment_no());
}
count--;
}
public static void main(String[] args) throws SQLException {
Test test = new Test();
test.getTree(0);
}
private String buildSpace(int a){
StringBuffer stringBuffer = new StringBuffer();
for (int i = 1; i < a; i++) {
stringBuffer.append(" ");
}
return stringBuffer.toString();
}
}
5、输出结果
yanfa[101]
yanfa11[1001]
yanfa121[10001]
yanfa122[10002]
yanfa123[10003]
yanfa12[1002]
yanfa13[1003]
yanfa14[1004]
yanfa15[1005]
yanfa124[10005]
yanfa16[1006]
yanfa125[10006]
xiaoshou11[2001]
ceshi[201]
xiaoshou12[2002]
xiaoshou13[2003]
xiaoshou14[2005]
xiaoshou15[2006]
xiaoshou16[2007]
xiaoshou[301]
ceshi11[3001]
ceshi12[3002]
ceshi13[3003]
ceshi14[3005]
ceshi13242[3006]
ceshi16[3007]
6、我的理解
这道题在于要想清楚递归的路径是向下的路一条道走到黑,没路可走了就会折回到上一层,寻找新的路。