`
编程足球
  • 浏览: 257712 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Ext 生成树递归算法

    博客分类:
  • Ext
 
阅读更多
最近在生成Ext的树型结构是,要用递归的算法来实现从数据库中读取出对应的json数据结构
在 网上找到一个不错的算法。一起来分享下:

import java.util.ArrayList;  
import java.util.Iterator;  
import java.util.List;  
  
  
public class Recursion {  
	StringBuffer returnStr=new StringBuffer();
    List nodeList =new ArrayList();  
//  构造方法里初始化模拟List,添加测试数据
    Recursion()
    {
        Node node1 = new Node(1,0);    
        Node node2 = new Node(2,1);    
        Node node3 = new Node(3,1);    
        Node node4 = new Node(4,2);    
        Node node5 = new Node(5,2);    
        Node node6 = new Node(6,2);    
        Node node7 = new Node(7,6);    
        Node node8 = new Node(8,6);    
            
        nodeList.add(node1);    
        nodeList.add(node2);    
        nodeList.add(node3);    
        nodeList.add(node4);    
        nodeList.add(node5);    
        nodeList.add(node6);    
        nodeList.add(node7);    
        nodeList.add(node8);    
    }  
    
    /**
     * 递归函数
     * @param list 要递归的节点对象集合
     * @param node 要进行递归的节点
     */
    public void recursionFn(List list , Node node){    
        if(hasChild(list,node)){    
            returnStr.append("{id:");  
            returnStr.append(node.getId());  
            returnStr.append(",parentId:");  
            returnStr.append(node.getParentId());  
            returnStr.append(",children:[");    
            List childList = getChildList(list,node);    
            Iterator it = childList.iterator();    
            while(it.hasNext()){    
                Node n = (Node)it.next();    
                recursionFn(list,n);    
            }    
            returnStr.append("]},");    
        }else{    
            returnStr.append("{id:");  
            returnStr.append(node.getId());  
            returnStr.append(",parentId:");  
            returnStr.append(node.getParentId());  
            returnStr.append(",leaf:true},");    
        }    
            
    }    
    
    /**
     * 判断是否有孩子
     * @param list
     * @param node
     * @return
     */
    public boolean hasChild(List list, Node node){  //判断是否有子节点  
        return getChildList(list,node).size()>0?true:false;  
    }  
    
    /**
     * 找去node的所有子节点
     * @param list 进行遍历的节点
     * @param node 要找孩子的节点
     * @return
     */
    public List getChildList(List list , Node node){  //得到子节点列表  
        List li = new ArrayList();    
        Iterator it = list.iterator();    
        while(it.hasNext()){    
            Node n = (Node)it.next();    
            if(n.getParentId()==node.getId()){    
                li.add(n);    
            }    
        }    
        return li;    
    }  
    public String modifyStr(String returnStr){//修饰一下才能满足Extjs的Json格式  
        return ("["+returnStr+"]").replaceAll(",]", "]");  
          
    }  
    public static void main(String[] args) {    
        Recursion r = new Recursion();    
        r.recursionFn(r.nodeList, new Node(1,0));    
        System.out.println(r.modifyStr(r.returnStr.toString()));    
    }    
}  



上面的节点结构为:
package com.ruijie.Test;

public class Node {  
    private int id;  
    private int parentId;  
    Node(){}  
    Node(int id,int parentId){  
        this.id=id;  
        this.parentId = parentId;  
    }  
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public int getParentId() {  
        return parentId;  
    }  
    public void setParentId(int parentId) {  
        this.parentId = parentId;  
    }  
}  


上面的算法简单。主要就是要有要遍历的节点和一个父节点的集合。
分享到:
评论

相关推荐

    两种JS生成树方式的源码

    首先,**使用现成插件**,例如文件名为`ext-2.2`可能指的是ExtJS,这是一个流行的JavaScript框架,提供了一套完整的组件库,其中包括用于生成树形结构的TreePanel组件。ExtJS的TreePanel提供了丰富的功能,如节点...

    利用Ext来实现的静态树(一次加载所有节点的树)

    在后台,我们使用递归算法来生成树形结构的数据。递归算法是一种非常常见的算法,通过不断地调用自己来解决问题。在这里,我们使用递归算法来遍历树形结构,生成每个节点的数据,并将其组合成一个完整的树形结构。 ...

    基于内存多叉树的Ext JS无限级树形菜单实现方案

    ### 基于内存多叉树的Ext JS无限级树形菜单实现方案 #### 一、研究背景与意义 在当前Web应用程序开发领域,Ext JS框架因其强大的功能和丰富的组件库而受到广泛欢迎,尤其在构建复杂的用户界面时表现突出。在Ext JS...

    递归类型学习教案.pptx

    递归类型的概念源于数据类型的递归定义,它允许我们构建具有层次结构的数据结构,如列表和树等。这类数据结构的特征在于,它们的定义依赖于自身。以列表为例,一个空列表(通常表示为nil)构成基础情况,而列表的...

    多叉树结合JavaScript树形控件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)

    3. 将获取到的数据转换为多叉树结构,这可能涉及到递归算法,确保所有子节点都被正确地关联到父节点。 4. 将多叉树转换为 JSON 格式,返回给前端。 5. 前端接收到 JSON 数据后,使用 JavaScript 树形控件(如 Ext JS...

    遍历文件夹并建成目录树

    总结起来,遍历文件夹并建立目录树是一个涉及操作系统接口、递归算法和数据结构的问题。通过动态控制深度和优化递归,我们可以有效地遍历任意深度的文件结构,同时利用生成器和目录树数据结构降低资源消耗,实现高效...

    好用的复选树源码改进版

    4. **状态管理**:实现递归算法来同步整个树的选中状态,确保所有节点的状态正确反映用户的意图。例如,当父节点被选中时,其所有子节点都应被选中;反之,如果所有子节点都被取消选中,父节点也应该被取消选中。 5...

    扫描硬盘.遍历文件夹并建成目录树

    综上所述,扫描硬盘并遍历文件夹以建立目录树是一项涵盖操作系统原理、文件系统、递归算法、数据结构以及编程技能的综合任务。通过这个过程,不仅可以理解计算机如何组织和管理文件,还可以提升编程和问题解决的能力...

    数据结构考研复习资料

    深度优先搜索(DFS)和广度优先搜索(BFS)是图的基本遍历算法,而最小生成树(Prim算法、Kruskal算法)和最短路径(Dijkstra算法、Floyd算法)是解决图问题的重要工具。 四、排序与查找 排序是对数据进行有序排列...

    多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法).pdf

    `ExtTreeHelper.createExtTree()`的具体实现未在给出的代码片段中展示,但通常会涉及递归函数,遍历数据库中的每一层数据,创建TreeNode对象并构建树结构。每个TreeNode对象包含了id、text以及可能的子节点列表。这...

    linux下目录遍历程序

    通过这个程序,开发者或学习者可以更好地掌握Linux下的文件和目录操作,理解递归算法,以及如何编写和使用`Makefile`进行自动化构建。同时,这也有助于增强对文件系统结构和操作的理解,这对于系统管理员、软件...

    文件的 上传与下载课件 --asp

    在ASP.NET中,文件的上传、下载和管理是构建Web应用程序时...这需要开发者具备数据库设计、ASP.NET控件使用、HTTP响应处理以及递归算法的基本知识。通过学习和实践这些内容,开发者能够创建出功能完善的文件管理系统。

    遍历本地磁盘所有文件夹

    Windows系统中常见的文件系统有FAT32、NTFS,而Linux系统中常见的有EXT2、EXT3、EXT4等。 - 在文件系统中,文件和文件夹按照目录结构组织,如同一棵倒置的树,根目录位于顶部,其他文件和子文件夹在其下级。 2. **...

    整理过的GRID综合应用

    实现这一功能通常需要递归算法来生成HTML结构,并配合AJAX请求以异步加载子层级数据。 4. **分页**:在大数据量的情况下,分页是必不可少的。它将数据分为多个部分,每次只加载和显示一部分,提高页面响应速度,...

    1996年清华大学编译原理和操作系统考研试题

    语法分析是在词法分析的基础上进行的,其目的是检查源程序是否有正确的语法结构,并构造语法树。常见的语法分析方法有自顶向下分析(如递归下降分析)和自底向上分析(如移进-归约分析)。LL(1)分析法和LR(k)分析法...

    嵌入式方面的面试题目全集

    6. **C语言面试常见问题**:这部分可能涵盖C语言的高级特性,如预处理器、指针的高级用法、递归、链表、树、图等数据结构的实现,以及算法设计与分析。 7. **高深笔试题目**:这部分可能涉及更复杂的嵌入式软件开发...

Global site tag (gtag.js) - Google Analytics