公司的一道面试题

这道题来自于公司的一道面试题


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、我的理解

这道题在于要想清楚递归的路径是向下的路一条道走到黑,没路可走了就会折回到上一层,寻找新的路。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值