1、以递归方式从指定根节点,获取一个树型结构的数据!
/**
* 根据指定的根节点从List中遍历一个子树出来;
*
* @param paramCollect:提供树节点数据的集合;
* @param paramDesList:产生的目标子数的集合;
* @param paramTreeRoot:树根元素;
* @return void:无返回值;
*/
private static void getSubTree(List<String> paramCollect,
List<String> paramDesList, final String paramTreeRoot) {
// try {
// Thread.sleep(100);// 1秒钟查看一次
// System.out.println("=1=" + paramCollect.size());
// } catch (InterruptedException ie) {
// ie.printStackTrace();
// }
if (paramCollect.isEmpty()) {
return;
} else {
int size = (paramCollect == null) ? 0 : paramCollect.size();
List<String> tempList = new ArrayList<String>();
for (int i = (size - 1); i >= 0; i--) {
String key = paramCollect.get(i);
String[] arrKey = key.split(SYMBOL_FOR_SPLIT_BROKER_INFO);
// 此处要严格判断相等,不能使用包含关系,比如:des2,des3包含des,但不等于des;
if (arrKey[0].trim().intern() == paramTreeRoot.trim().intern()
|| arrKey[1].trim().intern() == paramTreeRoot.trim()
.intern()) {
paramDesList.add(key);
tempList.add(key);
paramCollect.remove(i);
}
}
boolean isRecursiveStopping = false;
for (int j = 0; j < (tempList == null ? 0 : tempList.size()); j++) {
String key = (String) tempList.get(j);
String[] arrKey = key.split(SYMBOL_FOR_SPLIT_BROKER_INFO);
if (arrKey[0].trim().intern() == paramTreeRoot.trim().intern()) {
getSubTree(paramCollect, paramDesList, arrKey[1]);
} else {
getSubTree(paramCollect, paramDesList, arrKey[0]);
}
isRecursiveStopping = true;
}
if (isRecursiveStopping) {
return;
}
}
}
public static void main(String[] params) {
List<String> data = new ArrayList<String>();
data.add("a<>b");
data.add("a<>c");
data.add("a<>e");
data.add("c<>d");
data.add("d<>f");
data.add("m<>l");
data.add("g<>h");
data.add("i<>j");
data.add("j<>k");
data.add("c<>h");
List<String> testList = new ArrayList<String>();
getSubTree(data, testList, "a");
for (int i = 0; i < (testList == null ? 0 : testList.size()); i++) {
String key = (String) testList.get(i);
System.out.println("=No."+(i+1)+" key is:=" + key + "=end=");
}
}
注意:Map(HashMap和Hashtable)中remove和hasNext不能同时操作,所有用List(ArrayList)数据结构来遍历;
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:
分享到:
相关推荐
Oracle数据库在处理树形结构数据时提供了强大的递归查询功能,这种特性对于组织结构、产品分类、层级菜单等场景的应用非常广泛。递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的...
这通常通过循环和递归的方式实现,从当前选中的节点开始,向上追溯到根节点,每次调用`树型框.取得父节点`获取上一级节点,直到得到根节点。 4. 文本处理:在得到各个节点的路径后,我们可能还需要进行一些文本处理...
1. **递归构建**:从根节点开始,递归地为每个子节点创建新的对象,并将它们添加到父节点的子节点列表中。 2. **数据绑定**:将后台获取的扁平化数据结构转换为树型结构,这通常涉及遍历和构建父子关系。 3. **DOM...
1. **构建树结构**:首先,你需要创建一个根节点,然后根据数据源递归地添加子节点。每个节点都应有一个属性用于存储过滤所需的数据。 2. **定义过滤器**:创建一个Filter类,其中包含过滤条件和一个方法,该方法...
树型框(TreeCtrl)是GUI编程中常见的控件,它允许用户以层次结构的方式显示数据。在易语言中,你可以通过发送消息或者使用类库方法来操作树型框,比如添加、删除节点,设置节点文本,以及响应用户的点击事件。 ...
2. **打开记录集**:通过连接对象,调用`Open`方法打开一个记录集,指定SQL查询语句,用于从数据库中获取数据。 3. **遍历记录集**:遍历打开的记录集,每条记录对应树型框中的一个节点。根节点通常代表整个数据集...
通过指定START WITH条件来定义树的根节点,然后使用CONNECT BY表达式来定义节点之间的连接规则。例如,如果我们有一个员工表(EMPLOYEE),其中PARENT_EMP_ID字段表示父员工ID,那么以下查询可以找出所有属于某个...
创建完函数后,可以使用`SELECT`语句结合`FIND_IN_SET`函数来查询指定根节点的所有子节点。 ```sql SELECT getChildLst(1); ``` **方法二:使用递归存储过程** 1. **创建递归存储过程**: 另一种方法是创建...
这种结构通常通过递归的方式实现,每个节点可以有零个或多个子节点,形成一个无限层级的树状结构。在JS中,可以使用对象或者数组来表示这种结构,通过递归函数来生成和遍历树形结构。 二、动态加载与刷新 无限级树...
在这个场景中,它可能是用来获取程序执行文件的路径,以便作为遍历的起点,或者作为树结构的根节点。 在实现这个功能时,我们需要先创建一个`CTreeCtrl`实例,并设置好基本样式。然后,从用户指定的或程序自身的...
此外,还有`get_path`函数,可以获取从根节点到指定节点的路径,通过递归获取每个节点的父节点路径,最后合并成完整的路径。 然而,领接表方式的缺点是效率较低。当树结构层次较深时,递归查询会导致大量的SQL操作...
标题“管理数据库(使用树型控件).rar_VC 树形控件_vc 树_树型控件_树形 _树形控件”表明这个压缩包内包含了一个使用VC++实现的数据库管理系统,该系统通过树形控件来展示和操作数据库中的数据。 树形控件是Windows ...
1. **树形结构(Tree Structure)**:是一种非线性数据结构,由一个根节点和若干子节点组成,每个子节点还可以拥有自己的子节点。在Web开发中,树形结构常用于构建目录或层级菜单等。 2. **DOM (Document Object ...
- **二叉查找树**:左子树的所有节点都小于根节点,右子树的所有节点都大于根节点。 - **二叉堆**:一种特殊的完全二叉树,可以用来实现优先队列。 - **哈夫曼树**:用于编码的二叉树,广泛应用于数据压缩。 #### ...
2. **构建数据模型**: 根据提取的数据,构建一个树状的数据模型,其中每个节点代表XML文件中的一个元素。 3. **渲染视图**: 最后,根据构建好的树状数据模型,使用前端框架(如AngularJS、React等)渲染出可视化的...
`getchilds`方法用于获取指定节点的所有子节点,它首先创建一个包含指定节点ID的数组,然后调用`getlist`方法递归地获取所有子节点。 6. 获取节点的父节点路径 `getparents`方法用于获取一个节点到根节点的完整路径...
这段代码将在 TreeView 控件中创建一个名为“A”的根节点。 ##### 4.2 Nodes 集合的 Add 方法 `Nodes.Add` 方法是用于添加新节点的主要方法。它可以接受多个参数,用于指定节点的位置、文本和其他属性。 - **参数...
首先,我们需要添加一个表示根节点的项,通常为驱动器或者顶级目录。可以使用InsertItem函数插入新项,并设置其文本、图像索引等属性。 ```cpp HTREEITEM hRoot = m_treeCtrl.InsertItem(_T("根节点"), 0, 0); ...
1. 获取根节点,通常为树控件的第一个子节点(GetRootItem)。 2. 访问当前节点并打印或处理。 3. 对当前节点的每个子节点递归执行以上步骤,直到没有子节点为止。 在VC中,我们可以使用GetChildItem、...
在C#编程中,`TreeView`控件是一个非常实用的组件,它允许用户以树状结构展示数据,常用于文件系统、目录结构等场景。本篇文章将深入探讨如何使用C#和`TreeView`控件来遍历系统文件夹,并通过递归方法实现这一功能。...