日期:2014-05-20  浏览次数:20765 次

请教一个循环遍历的问题
现在表结构是这样的
条目1----条目2
条目2----条目3
条目2----条目4
条目3----空
条目4----条目5
条目5----空
现在已知条目1,想根据条目1查找出所有相关的条目。遍历的终止是为空的条目。
其中,有的条目对应多个条目,而且条目的深度不确定。
想问问这个循环该怎么写?最好别是递归,不好理解

------解决方案--------------------
看帖子吧:
http://topic.csdn.net/u/20111124/17/76e30f79-26f2-43fb-a16f-c27f08db79d2.html

Java code

    /**
     * @param PostCode
     *             根据父节点获取所有子节点岗位编号
     * @return  树的子结点集合
     */
    @SuppressWarnings("unchecked")
    public List<JobType> getPostCodeChilds(String postCode) {
        List<JobType> ret = new ArrayList<JobType>();
        List<JobType> retRecursive = null;
        List<JobType> children = getChildrenNodes(postCode);

        for(JobType job0 : children){
            String displayOrder = job0.getDisplyOrder();
            if(!CommUtil.isNull(displayOrder) && displayOrder.equals("po")){
                ret.add(job0);
            }else{
                retRecursive = getPostCodeChilds(job0.getJobTypeCode());
                if(ret.size() == 0){
                    ret = retRecursive;
                }else{
                    ret.addAll(retRecursive);
                }
            }
        }
        return ret;
    }

------解决方案--------------------
。。。你这个不知道深度是多少。除了用递归。还能怎么办啊。
------解决方案--------------------
这个结构用递归简单点吧,要不是用算法去写,估计得相当麻烦,
------解决方案--------------------
探讨

。。。你这个不知道深度是多少。除了用递归。还能怎么办啊。

------解决方案--------------------
得有一个根据父条目去判断子条目列表中是否存在为空的递归方法

hasNullAmongChildren(Item fatherItem) {
for(int i=0;i<=fatherItem.getChildrenSize();i++){
if(item[i] == null) {
//got it
} else {
hasNullAmongChildren(item[i]);
}
}
}

这是深搜先序遍历

------解决方案--------------------
要是oracle的话用sql直接就可以。
------解决方案--------------------
你这个是SQL递归问题,给个样例,应该可以解决你的问题
SQL code
select d.* from basis_organization d 
       start  with d.organizationid='O00001'
       connect by prior d.organizationid=d.parentid;

------解决方案--------------------
用队列吧
------解决方案--------------------
用递归,堆栈,列表,队列什么都可以,关键看你需要什么
------解决方案--------------------
oracle 数据库 递归查询sql
select t.* from table t
start with t.id= :p 
connect by ..
------解决方案--------------------
建议多理解递归,动态规划~~

这是最基本的一些算法。