`
can_do
  • 浏览: 262430 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

以递归方式从指定根节点,获取一个树型结构的数据

阅读更多
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递归树形结构查询功能

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

    易语言取树型框当前选中项的全路径

    这通常通过循环和递归的方式实现,从当前选中的节点开始,向上追溯到根节点,每次调用`树型框.取得父节点`获取上一级节点,直到得到根节点。 4. 文本处理:在得到各个节点的路径后,我们可能还需要进行一些文本处理...

    树型目录,权限设置通用JS实例

    1. **递归构建**:从根节点开始,递归地为每个子节点创建新的对象,并将它们添加到父节点的子节点列表中。 2. **数据绑定**:将后台获取的扁平化数据结构转换为树型结构,这通常涉及遍历和构建父子关系。 3. **DOM...

    java-根据过滤条件显示树形结构

    1. **构建树结构**:首先,你需要创建一个根节点,然后根据数据源递归地添加子节点。每个节点都应有一个属性用于存储过滤所需的数据。 2. **定义过滤器**:创建一个Filter类,其中包含过滤条件和一个方法,该方法...

    易语言 枚举子夹及文件到树型框

    树型框(TreeCtrl)是GUI编程中常见的控件,它允许用户以层次结构的方式显示数据。在易语言中,你可以通过发送消息或者使用类库方法来操作树型框,比如添加、删除节点,设置节点文本,以及响应用户的点击事件。 ...

    ADO方式填充树型框.zip易语言程序源码资源下载

    2. **打开记录集**:通过连接对象,调用`Open`方法打开一个记录集,指定SQL查询语句,用于从数据库中获取数据。 3. **遍历记录集**:遍历打开的记录集,每条记录对应树型框中的一个节点。根节点通常代表整个数据集...

    oracle 树型的寻父或寻子

    通过指定START WITH条件来定义树的根节点,然后使用CONNECT BY表达式来定义节点之间的连接规则。例如,如果我们有一个员工表(EMPLOYEE),其中PARENT_EMP_ID字段表示父员工ID,那么以下查询可以找出所有属于某个...

    MySQL实现树状所有子节点查询的方法

    创建完函数后,可以使用`SELECT`语句结合`FIND_IN_SET`函数来查询指定根节点的所有子节点。 ```sql SELECT getChildLst(1); ``` **方法二:使用递归存储过程** 1. **创建递归存储过程**: 另一种方法是创建...

    无限级可刷新JS树型菜单

    这种结构通常通过递归的方式实现,每个节点可以有零个或多个子节点,形成一个无限层级的树状结构。在JS中,可以使用对象或者数组来表示这种结构,通过递归函数来生成和遍历树形结构。 二、动态加载与刷新 无限级树...

    递归遍历目录并生成树

    在这个场景中,它可能是用来获取程序执行文件的路径,以便作为遍历的起点,或者作为树结构的根节点。 在实现这个功能时,我们需要先创建一个`CTreeCtrl`实例,并设置好基本样式。然后,从用户指定的或程序自身的...

    PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例

    此外,还有`get_path`函数,可以获取从根节点到指定节点的路径,通过递归获取每个节点的父节点路径,最后合并成完整的路径。 然而,领接表方式的缺点是效率较低。当树结构层次较深时,递归查询会导致大量的SQL操作...

    管理数据库(使用树型控件).rar_VC 树形控件_vc 树_树型控件_树形 _树形控件

    标题“管理数据库(使用树型控件).rar_VC 树形控件_vc 树_树型控件_树形 _树形控件”表明这个压缩包内包含了一个使用VC++实现的数据库管理系统,该系统通过树形控件来展示和操作数据库中的数据。 树形控件是Windows ...

    纯JavaScript静态树型

    1. **树形结构(Tree Structure)**:是一种非线性数据结构,由一个根节点和若干子节点组成,每个子节点还可以拥有自己的子节点。在Web开发中,树形结构常用于构建目录或层级菜单等。 2. **DOM (Document Object ...

    数据结构与算法

    - **二叉查找树**:左子树的所有节点都小于根节点,右子树的所有节点都大于根节点。 - **二叉堆**:一种特殊的完全二叉树,可以用来实现优先队列。 - **哈夫曼树**:用于编码的二叉树,广泛应用于数据压缩。 #### ...

    java操纵xml文件的读写,并根据xml生成树型菜单

    2. **构建数据模型**: 根据提取的数据,构建一个树状的数据模型,其中每个节点代表XML文件中的一个元素。 3. **渲染视图**: 最后,根据构建好的树状数据模型,使用前端框架(如AngularJS、React等)渲染出可视化的...

    php树型类实例

    `getchilds`方法用于获取指定节点的所有子节点,它首先创建一个包含指定节点ID的数组,然后调用`getlist`方法递归地获取所有子节点。 6. 获取节点的父节点路径 `getparents`方法用于获取一个节点到根节点的完整路径...

    TreeView应用指南.pdf

    这段代码将在 TreeView 控件中创建一个名为“A”的根节点。 ##### 4.2 Nodes 集合的 Add 方法 `Nodes.Add` 方法是用于添加新节点的主要方法。它可以接受多个参数,用于指定节点的位置、文本和其他属性。 - **参数...

    MFC。C++编程用树型控件列出文件夹

    首先,我们需要添加一个表示根节点的项,通常为驱动器或者顶级目录。可以使用InsertItem函数插入新项,并设置其文本、图像索引等属性。 ```cpp HTREEITEM hRoot = m_treeCtrl.InsertItem(_T("根节点"), 0, 0); ...

    VC知识库文章 - 树控件的应用 -- 求子树节点的集.rar_vc 树控件

    1. 获取根节点,通常为树控件的第一个子节点(GetRootItem)。 2. 访问当前节点并打印或处理。 3. 对当前节点的每个子节点递归执行以上步骤,直到没有子节点为止。 在VC中,我们可以使用GetChildItem、...

    解析xml的jar包

    JDOM是Java中一个专门用于处理XML的库,它提供了一个基于树型结构的API来操作XML文档。以下是一些使用JDOM解析XML的核心知识点: 1. **构建JDOM模型**: - 使用`org.jdom2.DocumentBuilderFactory`创建`...

Global site tag (gtag.js) - Google Analytics