`
sammyfun
  • 浏览: 1163462 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

转载 树结构

    博客分类:
  • java
 
阅读更多
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;   
    }   
}


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()));     
    }     
}
分享到:
评论

相关推荐

    php不用递归实现无限分类数据的树形格式化

    我们知道很多开源软件的无限分类都是采用递归的算法,但是我们知道递归即浪费时间,又浪费空间(内存), 故所以弃用...版权声明:开源代码,版权归主机爸爸(IDCbaba.com)所有,可自由转载,转载请务必保留此版权说明。

    本人转载 在此申明 语法树 c 实现 四则运算语法树

    四则运算语法树是一种计算机科学中的数据结构,用于表示数学表达式,特别是在编译器设计和解析器构建中。在C++中实现这样的语法树,我们需要理解几个关键概念:解析、抽象语法树(AST)以及如何用C++编程语言来表示...

    转载 查找算法 二叉排序树.doc

    二叉排序树的存储结构通常使用结构体来表示,如下所示: ```c typedef int KeyType; // 假设关键字类型为整数 typedef struct node { KeyType key; // 关键字项 InfoType otherinfo; // 其他数据域,根据应用情况...

    B树、B-树、B+树、B树_介绍、比较与小结(转载).doc

    B树、B-树、B+树和B*树是数据库和文件系统中常见的数据结构,主要用于高效地存储和检索大量数据。它们都是自平衡的多路搜索树,能够保持数据的有序性,并且在插入、删除和查找操作时保持较高的效率。 1. **B树**:B...

    c#语言版数据结构(转载)

    - **树型结构**:涵盖二叉树、平衡树等多种树形结构及其遍历算法。 - **图结构**:介绍图的基本概念、表示方法和常见算法如最短路径算法等。 **第七章和第八章**:专注于排序和查找算法的研究。 - **排序算法**:...

    [转载]常用的三种树形菜单

    这篇【转载】的博客文章“常用的三种树形菜单”探讨了实现这种交互方式的不同技术。尽管没有提供具体的文章内容,我们可以基于这个主题来深入讨论树形菜单的基本概念、实现方式以及相关的编程技术和工具。 1. **...

    北京交通大学-数据结构925-13年-18年考研真题(转载).rar

    这份"北京交通大学-数据结构925-13年-18年考研真题(转载)"包含了2013年至2018年间的全部试题,并且附带了答案,对备考者来说是一份宝贵的参考资料。 数据结构的学习涵盖了数组、链表、栈、队列、树、图等多种抽象...

    Huffman树编码问题

    关于Huffman树的编码问题,适合基础薄弱的学生转载

    红黑树的c实现源码与教程

    红黑树的c实现源码与剖析 ...本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/v_JULY_v/archive/2011/01/03/6114226.aspx 一切的详情请参见此文: 教你彻底实现红黑树:红黑树的c源码实现与剖析 ...

    考研数据结构算法C语言实现最新代码.pdf

    树结构包括二叉树、平衡树(如AVL树、红黑树)、堆(最大堆和最小堆)等,它们在搜索、排序等领域有广泛应用。图结构则涉及邻接矩阵和邻接表等表示方式,常用于网络拓扑、最短路径问题等。 在算法方面,考研中常见...

    python数据结构与算法详解与源码

    版权声明:本文为CSDN博主「dwf1354046363」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dwf1354046363/article/details/119832814

    CCIE面试题 转载于互联网

    在PIM-SM中,有两个主要的树结构:共享树(RPT)和源树(SPT)。当RP( rendezvous point )失效时,网络行为会发生变化。 - 如果有**备份RP**,网络会自动切换到备份RP,并构建新的RPT,以保持多播流量的传输。 - ...

    C的一些整理(转载free)

    C语言中的指针应用广泛,如动态内存分配、函数参数传递、链表和树结构的实现等。在动态内存分配中,通过指针可以实现变量的动态创建和销毁。例如,当需要一个不确定大小的数组时,可以使用malloc()分配内存,然后...

    傅清祥:算法与数据结构

    《算法与数据结构》一书涵盖了算法与数据结构的主要知识单元,包括算法与数据结构的基本概念、抽象数据类型(ADT)、基于序列的ADT(如数组、栈、队列和字符串等)、反映层次关系的ADT(如树、堆和各种平衡树等)、...

    转载 层次聚类.docx

    层次聚类是一种常用的聚类算法,旨在将对象分组成树形结构,以便更好地了解对象之间的相似性和差异性。该方法通常用于数据挖掘、机器学习和数据分析等领域。 1. 层次聚类的定义 层次聚类是指将对象分组成树形结构...

    [转载]迭代算法 1.0

    4. 数据结构:如堆、图、树等,它们的操作常包含迭代过程。 五、注意事项 1. 终止条件:合理设置迭代终止条件至关重要,以防止无限循环。 2. 精度要求:对于数值计算,需要考虑迭代解的精度,防止过度迭代导致资源...

    数据结构微软面试100道题

    数据结构的内容包括但不限于数组、链表、栈、队列、树、图以及哈希表等。 算法是解决问题的一系列定义明确的计算步骤。在程序员面试中,算法能力是衡量应聘者技术实力的核心。面试中的算法题目往往涉及数据结构的...

    观光果园的设计与管理(转载)作文.doc

    园林结构应该丰富多彩,包括楼台亭榭、小桥流水等元素,增添观赏价值。果树的种植布局应具有层次感,通过选择不同种类和品种的果树,确保全年都有花卉盛开和果实可摘,实现“三季有花,四季有果”的目标。此外,引入...

    flex内存泄露(转载)

    Flex应用中的对象组织成树形结构,从根节点(通常是`Application`类实例)开始遍历所有对象。垃圾收集器会标记所有从根节点可达的对象为“有效”。未能被标记的对象被视为“无效”,并最终被回收。 **标记法详解:*...

Global site tag (gtag.js) - Google Analytics