0 0

请问这样的树形递归怎么写?10

我想在下拉框中直接遍历出这样的效果:

 
用的是这样一个JavaBean:

 

public class Item {
	int id;
	int pid;
	String name;

	public Item(int id, int pid, String name) {
		this.id = id;
		this.pid = pid;
		this.name = name;
	}

	public static void main(String[] args) {
		List<Item> mytests = new ArrayList<Item>();
		mytests.add(new Item(1, 0, "节点1"));
		mytests.add(new Item(2, 0, "节点2"));
		mytests.add(new Item(3, 1, "节点3"));
		mytests.add(new Item(4, 1, "节点4"));
		mytests.add(new Item(5, 4, "节点5"));
		mytests.add(new Item(6, 4, "节点6"));
		mytests.add(new Item(7, 2, "节点7"));
		mytests.add(new Item(8, 2, "节点8"));
		mytests.add(new Item(9, 8, "节点9"));
		mytests.add(new Item(10, 8, "节点10"));
	}

	public static List<Item> indentCategory(List<Item> items) {
		// 对items进行排序, 并在name属性前添加'┣'进行缩进 
		return null;
	}
}

 注释的方法应该怎么样写?  

要求尽量不要增额外字段, 数据库查出来的List<Item>经过方法处理的返回结果就能遍历出我的要效果??

2013年5月25日 03:35
  • 大小: 11.5 KB

4个答案 按时间排序 按投票排序

0 0

这个是根据 节点的深度在节点前面添加┣ 符号而已。

2013年5月27日 14:02
0 0

引用
public static List<Item> getSon(List<Item> items,int id){ 
        List<Item> list=new ArrayList(); 
        for(Item item:items){ 
            if(item.pid==id){ 
                list.add(new Item(item.id,item.pid,"┣┣┣┣"+item.name)); 
                getSon(items,item.id); 
            } 
        } 
        return list; 
    } 



借助于tar0917 的代码修改getSon方法,只需要一个方法就可以了。



public static void main(String[] abb){
   List<Test> list=new ArrayList();
     list=  getSon(mytests,0,0,list);
     for(Test t:list){
    	 System.out.println(t.getName());
     }
}
 public static List<Test> getSon(List<Test> Tests,int id,int n,List<Test> list){  
     for(Test Test:Tests){  
    	 int b=0;
    	 if(n>0)b=n;
    	 if(Test.pId==id){  
    		 list.add(new Test(Test.id,Test.pId,getStr(b)+Test.name));  
    		 b++;
             getSon(Tests,Test.id,b,list);  
         }  
     }  
     return list;  
 }
 
 public static String getStr(int n){
	 String str="";
	 for(int i=0;n>0;n--){
		 str+="┣┣";
	 }
	 return str;
 }

2013年5月27日 10:44
0 0

package controllers.test;

import java.util.ArrayList;
import java.util.List;

public class Item {  
    int id;  
    int pid;  
    String name;  
  
    public Item(int id, int pid, String name) {  
        this.id = id;  
        this.pid = pid;  
        this.name = name;  
    }  
  
    public static void main(String[] args) {  
        List<Item> mytests = new ArrayList<Item>();  
        mytests.add(new Item(1, 0, "节点1"));  
        mytests.add(new Item(2, 0, "节点2"));  
        mytests.add(new Item(3, 1, "节点3"));  
        mytests.add(new Item(4, 1, "节点4"));  
        mytests.add(new Item(5, 4, "节点5"));  
        mytests.add(new Item(6, 4, "节点6"));  
        mytests.add(new Item(7, 2, "节点7"));  
        mytests.add(new Item(8, 2, "节点8"));  
        mytests.add(new Item(9, 8, "节点9"));  
        mytests.add(new Item(10, 8, "节点10"));  
        List<Item> items=indentCategory(mytests);
        for(Item item:items){
        	System.out.println(item.name);
        }
    }  
  
    public static List<Item> indentCategory(List<Item> items) {  
        // 对items进行排序, 并在name属性前添加'┣'进行缩进
        List<Item> list=new ArrayList<Item>();
    	for(Item item:items){
    		if(item.pid==0){
    			list.add(new Item(item.id,item.pid,item.name));
    			List<Item> it=getParent(items,item.id);
    			for(Item t:it){
    				list.add(t);
    			}
    		}
    	}
    	return list;
    }  
    
    public static List<Item> getParent(List<Item> items,int id){
    	List<Item> list=new ArrayList();
    	for(Item item:items){
    		if(item.pid==id){
    			list.add(new Item(item.id,item.pid,"┣┣"+item.name));
    			getParent(items,item.id);
    			List<Item> it=getSon(items,item.id);
    			for(Item t:it){
    				list.add(t);
    			}
    		}
    	}
        return list;  
    }
    
    public static List<Item> getSon(List<Item> items,int id){
    	List<Item> list=new ArrayList();
    	for(Item item:items){
    		if(item.pid==id){
    			list.add(new Item(item.id,item.pid,"┣┣┣┣"+item.name));
    			getSon(items,item.id);
    		}
    	}
    	return list;
    }
} 

2013年5月26日 10:49
0 0

class Item{
int ID;
int PID;
String name;
List<Item> sons;
}
这样的javabean

2013年5月25日 23:23

相关推荐

    c# 树形递归实例

    在这个"WebApplication1"项目中,我们可以看到一个关于如何在C#中实现树形递归的实例。树形递归是一种处理具有层次关系数据的方法,特别是在处理树形控件时非常有用。下面,我们将深入探讨这个主题。 首先,理解树...

    用递归实现C#树形结构

    本篇将详细探讨如何使用递归方法来实现C#中的树形结构。 首先,理解树形结构的基本概念至关重要。在计算机科学中,树是由节点(也称为顶点)和边组成的非线性数据结构。每个节点可以有零个或多个子节点,而顶部的...

    jpa单表递归树形结构实现

    在本示例中,我们将探讨如何使用Spring JPA来实现单表递归树形结构。 首先,我们需要理解递归树形结构。在数据库中,树形结构通常通过自关联来表示,即一个表的某个字段引用该表自身,形成一个层级关系。对于单表...

    Java递归算法构造JSON树形结构

    Java 递归算法构造 JSON 树形结构 Java 递归算法构造 JSON 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理...

    递归方式实现树形菜单

    在IT领域,尤其是在前端开发和数据结构中,"递归方式实现树形菜单"是一个常见的需求。树形菜单通常用于网站导航,它以层级结构显示数据,用户可以通过展开和折叠节点来浏览不同的层次。递归是一种解决问题的方法,...

    树形下拉列表 递归实现

    本篇文章将重点讲解如何通过递归的方式在服务器端(如SQL Server)以及客户端实现树形下拉列表。 首先,我们需要理解数据库的设计。在SQL Server中,我们可以创建一个具有层级关系的表,通常使用自引用的方式,即每...

    Oracle递归树形结构查询功能

    Oracle数据库在处理树形结构数据时提供了强大的递归查询功能,这种特性对于组织结构、产品分类、层级菜单等场景的应用非常广泛。递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的...

    C#控制台用递归方法显示树形结构

    在这个场景中,我们将探讨如何使用C#语言来实现一个控制台应用,它能用递归方法显示一个类似于图书类别的树形结构。 首先,我们需要理解什么是递归。递归是一种解决问题的方法,它通过调用自身来解决子问题,直到...

    java树形结构递归查询

    * 根据等级查询类目树 * * @param level * @return */ @Override public List&lt;CategoryTreeDTO&gt; queryCategoryTree(Integer level) { //查询当前级别下类目 List&lt;CategoryDO&gt; list = categoryDAO.list...

    javascript 写的 树形结构( 递归方法 )(普通写法跟对象写法)

    在这个场景下,我们讨论的是如何使用递归方法来构建和操作树形结构,无论是普通的写法还是基于对象的写法。递归是一种强大的编程技巧,它在处理层次结构如树时特别有效。 首先,我们要理解树的基本概念。在树形结构...

    mysql 树形结构查询

    这种查询方式可以高效地查询树形结构的数据,并且可以根据需要设置递归深度。 MySQL 中的树形结构查询可以使用存储过程来实现,存储过程是一种复杂的查询逻辑,可以将复杂的查询逻辑封装在存储过程中,以提高查询...

    JAVA_SQL递归树形

    JAVA_SQL递归树形,用递归算法结合数据库对J2EE实现树结构

    递归形成树形结构.txt

    javascript递归形成树形结构

    Java递归将List转为树形结构Java递归将List转为树形结构

    Java递归将List转为树形结构 博客地址:https://blog.csdn.net/weixin_38500202/article/details/110456363

    .net ,递归写自定义树

    这里我们关注的是使用jQuery控件配合后台.NET代码来递归构造树形结构。递归是一种强大的编程技术,它允许函数或方法调用自身来解决复杂问题,特别适合处理具有层次结构的数据。 首先,我们要理解.NET中的递归实现。...

    SQL 2005树形表非循环递归查询

    SQL 2005树形表非循环递归查询 利用SQL 2005的新特性查询树形表,在SQL2000中此方法不可用.

    带数据库的递归经典树形菜单

    本文将深入探讨“带数据库的递归经典树形菜单”这一主题,结合给定的文件内容,包括如何实现递归,构建树形结构,以及如何通过SQL语句来管理和操作数据。 首先,我们要理解“递归”这一概念。在编程中,递归是一种...

    树结点递归添加-VB.NET

    递归是一种强大的编程技术,它允许函数调用自身来解决复杂的问题,特别适合处理具有层级关系的数据结构,如树形结构。 在树形结构中,每个节点可以有零个、一个或多个子节点,这种结构天然地适用于表示文件系统、...

    树形目录的递归实现数据库

    ### 树形目录的递归实现数据库 #### 数据库结构设计与实现原理 根据所提供的信息,我们可以了解到,这里讨论的是如何使用 Java 和 JSP 实现一个树形目录系统,并将其存储在数据库中。该系统主要涉及到数据库的设计...

Global site tag (gtag.js) - Google Analytics