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()));
}
}
分享到:
相关推荐
我们知道很多开源软件的无限分类都是采用递归的算法,但是我们知道递归即浪费时间,又浪费空间(内存), 故所以弃用...版权声明:开源代码,版权归主机爸爸(IDCbaba.com)所有,可自由转载,转载请务必保留此版权说明。
四则运算语法树是一种计算机科学中的数据结构,用于表示数学表达式,特别是在编译器设计和解析器构建中。在C++中实现这样的语法树,我们需要理解几个关键概念:解析、抽象语法树(AST)以及如何用C++编程语言来表示...
二叉排序树的存储结构通常使用结构体来表示,如下所示: ```c typedef int KeyType; // 假设关键字类型为整数 typedef struct node { KeyType key; // 关键字项 InfoType otherinfo; // 其他数据域,根据应用情况...
B树、B-树、B+树和B*树是数据库和文件系统中常见的数据结构,主要用于高效地存储和检索大量数据。它们都是自平衡的多路搜索树,能够保持数据的有序性,并且在插入、删除和查找操作时保持较高的效率。 1. **B树**:B...
- **树型结构**:涵盖二叉树、平衡树等多种树形结构及其遍历算法。 - **图结构**:介绍图的基本概念、表示方法和常见算法如最短路径算法等。 **第七章和第八章**:专注于排序和查找算法的研究。 - **排序算法**:...
这篇【转载】的博客文章“常用的三种树形菜单”探讨了实现这种交互方式的不同技术。尽管没有提供具体的文章内容,我们可以基于这个主题来深入讨论树形菜单的基本概念、实现方式以及相关的编程技术和工具。 1. **...
这份"北京交通大学-数据结构925-13年-18年考研真题(转载)"包含了2013年至2018年间的全部试题,并且附带了答案,对备考者来说是一份宝贵的参考资料。 数据结构的学习涵盖了数组、链表、栈、队列、树、图等多种抽象...
关于Huffman树的编码问题,适合基础薄弱的学生转载
红黑树的c实现源码与剖析 ...本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/v_JULY_v/archive/2011/01/03/6114226.aspx 一切的详情请参见此文: 教你彻底实现红黑树:红黑树的c源码实现与剖析 ...
树结构包括二叉树、平衡树(如AVL树、红黑树)、堆(最大堆和最小堆)等,它们在搜索、排序等领域有广泛应用。图结构则涉及邻接矩阵和邻接表等表示方式,常用于网络拓扑、最短路径问题等。 在算法方面,考研中常见...
版权声明:本文为CSDN博主「dwf1354046363」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dwf1354046363/article/details/119832814
在PIM-SM中,有两个主要的树结构:共享树(RPT)和源树(SPT)。当RP( rendezvous point )失效时,网络行为会发生变化。 - 如果有**备份RP**,网络会自动切换到备份RP,并构建新的RPT,以保持多播流量的传输。 - ...
C语言中的指针应用广泛,如动态内存分配、函数参数传递、链表和树结构的实现等。在动态内存分配中,通过指针可以实现变量的动态创建和销毁。例如,当需要一个不确定大小的数组时,可以使用malloc()分配内存,然后...
《算法与数据结构》一书涵盖了算法与数据结构的主要知识单元,包括算法与数据结构的基本概念、抽象数据类型(ADT)、基于序列的ADT(如数组、栈、队列和字符串等)、反映层次关系的ADT(如树、堆和各种平衡树等)、...
层次聚类是一种常用的聚类算法,旨在将对象分组成树形结构,以便更好地了解对象之间的相似性和差异性。该方法通常用于数据挖掘、机器学习和数据分析等领域。 1. 层次聚类的定义 层次聚类是指将对象分组成树形结构...
4. 数据结构:如堆、图、树等,它们的操作常包含迭代过程。 五、注意事项 1. 终止条件:合理设置迭代终止条件至关重要,以防止无限循环。 2. 精度要求:对于数值计算,需要考虑迭代解的精度,防止过度迭代导致资源...
数据结构的内容包括但不限于数组、链表、栈、队列、树、图以及哈希表等。 算法是解决问题的一系列定义明确的计算步骤。在程序员面试中,算法能力是衡量应聘者技术实力的核心。面试中的算法题目往往涉及数据结构的...
园林结构应该丰富多彩,包括楼台亭榭、小桥流水等元素,增添观赏价值。果树的种植布局应具有层次感,通过选择不同种类和品种的果树,确保全年都有花卉盛开和果实可摘,实现“三季有花,四季有果”的目标。此外,引入...
Flex应用中的对象组织成树形结构,从根节点(通常是`Application`类实例)开始遍历所有对象。垃圾收集器会标记所有从根节点可达的对象为“有效”。未能被标记的对象被视为“无效”,并最终被回收。 **标记法详解:*...