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

tree 根据根节点递归得到所有叶子节点

阅读更多




Map<Integer,Monitortype> map=new HashMap<Integer,Monitortype>();非叶子节点
Map<Integer,Monitortype> map2=new HashMap<Integer,Monitortype>();//叶子节点


    /**
     * 根据树的根节点递归获取所有叶子节点
     * @param pid
     * @return
     */
    public void getleafMonitortype(int pid){
   
    List<Monitortype> mon =this.infoSearchService.getListByMonitorTypePid(pid);
    for(Monitortype mo:mon){
    if(mo.getNodeType()==1){
    map2.put(mo.getId(), mo);
    }
    if(mo.getNodeType()==0){
    map.put(mo.getId(), mo);
    }
    }
    if(map.size()!=0){
   
    getm();
   
    }
   
    }
   
    public void getm(){
    List l=new ArrayList();
    for (Map.Entry<Integer, Monitortype> entry : map.entrySet()) {
    List<Monitortype> mon =this.infoSearchService.getListByMonitorTypePid(entry.getKey());
        for(Monitortype mo:mon){
        if(mo.getNodeType()==1){
        map2.put(mo.getId(), mo);
        }
        if(mo.getNodeType()==0){
        map.put(mo.getId(), mo);
       
        }
        }
       
        l.add(entry.getKey());
    }
   
         if(l.size()!=0){
        for(int p=0;p<l.size();p++){
        map.remove(l.get(p));
       
        }
         }
    if(map.size()!=0){
    getm();
    }
   
    }

调用处:main{
map.clear();
map2.clear();
getleafMonitortype(pid);
List<Monitortype> list=new ArrayList();
//list = infoSearchService.getListByMonitorTypePid(pid);
for (Map.Entry<Integer, Monitortype> entry : map2.entrySet()) {
    list.add(entry.getValue());
System.out.println("map的键位:"+entry.getKey()+ ""+"map的值为:"+entry.getValue());
}

}


自此的到叶子节点的list ;

写的不是很好,请高手指教;





0
0
分享到:
评论

相关推荐

    根据子节点的金额向上汇总所有父节点的金额

    在这个问题中,我们可能从最底层的叶子节点开始,通过递归回溯到根节点,沿途累计金额。 4. **广度优先搜索(BFS)**:另一种遍历树的方法,先访问根节点,然后访问所有一级子节点,接着是所有二级子节点,以此类推...

    tree递归.rar

    在树的递归遍历中,基本情况通常是到达一个没有子节点的叶子节点。 在实际应用中,递归算法可以有效地处理树形结构,例如文件系统的目录结构、HTML DOM解析、编译器的语法分析等。不过,递归也需要注意其潜在的性能...

    自制无限级tree(采用递归算法)

    前序遍历(先访问根节点,再遍历子节点)、中序遍历(先遍历左子树,再访问根节点,最后遍历右子树)和后序遍历(先遍历子树,再访问根节点)都可以通过递归轻松实现。 4. **查询和修改节点**:在无限级树中查找...

    遍历二叉树的4个非递归算法.rar_binary tree_二叉树_二叉树 非递归 遍历_递归_遍历 CSharp

    初始时,从根节点开始,不断将其左子节点压入栈,直到遇到叶子节点。然后访问该节点,若其有右子节点,再将右子节点压入栈,重复该过程。 3. **后序遍历**(Left-Right-Root): 后序遍历的顺序是左子树、右子树、...

    中序遍历+子树交换+叶子结点

    根据提供的文件名“inoder-BinaryTree”、“Exchange-BinaryTree”和“numleaf”,我们可以猜测这些代码或程序分别实现了中序遍历、子树交换以及计算叶子结点的功能。可能的用途包括分析二叉树的性质、调整二叉树...

    递归的方式创建二叉树

    2. 创建根节点:根据给定的数据,创建二叉树的根节点。 3. 递归构造子树:对于每个子节点,使用递归调用函数来创建子树。在创建过程中,通常会根据输入数据的顺序决定是左子节点还是右子节点。 ```python def ...

    java递归无限层级树

    在实际应用中,我们通常会有一个根节点,初始化时调用`generateTree(rootNode, 0)`,这样就会开始生成整个树结构。为了展示树数据,我们可以提供一个递归的`printTree`方法,逐层打印节点信息。 ```java public ...

    B-Tree B-Tree

    3. 查找操作:在B-Tree中查找一个特定键,是从根节点开始,比较键值并根据结果决定向哪个子节点递归搜索,直到找到匹配的键或者到达叶子节点。 **B-Tree的应用** B-Tree被广泛应用于数据库管理系统,因为它可以...

    【数据结构】——搜索二叉树的插入,查找和删除(递归&非递归)

    2. 非递归查找:同样可以使用栈来实现,从根节点开始,按照二叉搜索树的性质逐层比较,直到找到目标节点或遍历完所有节点。 三、搜索二叉树的删除操作 删除操作相对复杂,因为可能有三种情况: 1. 要删除的节点...

    二叉树的各种遍历 递归非递归

    非递归实现同样用到栈,但处理方式不同:初始时将根节点压栈,然后不断弹出并访问左子节点,直到遇到叶子节点,此时访问该节点,然后将节点的右子节点压栈。 **后序遍历(Postorder Traversal)** 后序遍历的顺序是...

    二叉树的前,中,后序非递归,递归遍历,层次遍历,最长路径

    非递归实现同样可以借助栈,但处理方式不同,需要在遇到叶子节点或左子树为空时才访问根节点。 3. **后序遍历**: 后序遍历的顺序是:左子树 -&gt; 右子树 -&gt; 根节点。递归方法是先遍历左右子树,再访问根节点。非...

    求二叉树的叶子数和结点数

    **内部节点(Internal Node)**是指至少有一个子节点的节点,包括根节点和其他非叶子节点。 #### 三、递归算法实现 题目中的代码主要通过递归的方式来计算二叉树的叶子数和结点数。 ##### 3.1 创建二叉树 代码中的...

    用C语言求二叉树叶子结点

    这段代码创建了一个根节点值为1的二叉树,其中根节点有两个子节点,值分别为2和3,且这两个子节点都是叶子节点。运行此程序将输出2,因为有2个叶子节点。 在实际应用中,二叉树常用于实现搜索、排序和图形表示等...

    C++如何实现二叉树叶子节点个数计算 (2).docx

    `btree_init`函数用于初始化根节点,而`pre_crt_tree`函数则根据用户输入的字符流先序创建二叉树。在主函数`main`中,我们创建了二叉树,然后分别调用递归和非递归方法计算叶子节点数,并打印结果。 在给定的代码...

    递归操作树

    树的根节点没有父节点,而叶子节点没有子节点。在树中,节点之间的连接关系遵循一定的层次,形成了层次结构。 递归操作树的核心在于定义一个函数,该函数接受一个节点作为参数,并在其执行过程中调用自身处理子节点...

    B+ tree的java实现

    - 从根节点开始,根据键值比较不断下移到子节点,直到找到匹配的键值或者到达叶子节点。 - 在叶子节点中找到键值后,可以返回对应的数据。 4. **删除操作**: - 删除操作较为复杂,可能涉及键值的移动、节点的...

    Tree control的使用

    对于两层目录的节点,我们可能选择先遍历第一层的所有根节点,然后对每个根节点的直接子节点进行一次遍历。这可以通过循环和条件判断实现,确保只处理两层深度的节点,而不会深入到更深的层次。 接下来,我们要讨论...

    binary-tree-traversal-binary-tree.zip_tree

    查找操作在二叉搜索树中尤为高效,因为它满足左子树的所有节点值小于根节点,右子树的节点值大于根节点,这使得查找可以在对数时间内完成。插入和删除操作则需要维护树的平衡,以防止退化成链表,降低效率。常见的...

    C++ 二叉树遍历(非递归版)

    首先将根节点入栈1,然后进入一个循环,每次从栈1弹出一个节点,如果它是叶子节点或者其左右子节点都被访问过,就访问该节点;否则,将它未被访问过的子节点按右子节点优先的原则依次入栈1。同时,将已访问的节点放...

    二叉树的先序扩展创建,先序、中序、后序遍历的递归、非递归算法,求树的深度

    至于树的深度,可以理解为从根节点到最远叶子节点的最长路径上边的数目。对于递归方法,我们可以从每个节点出发,分别计算左子树和右子树的深度,取较大者加1作为当前节点的深度。非递归方法通常需要遍历整个树,...

Global site tag (gtag.js) - Google Analytics