递归之遍历部门

递归是一个非常有用的知识点。写点实例帮助自己记忆

中间有过程代码

首先一个javapojo类

 1 package com.qcf.po;
 2
 3 import java.util.HashSet;
 4 import java.util.Set;
 5
 6 public class Depart {
 7
 8     private Long id;
 9     private String name;
10     private String destion;
11     //用户
12     Set<User> users=new HashSet<User>();
13
14     //子类部门
15     Set<Depart> departs=new HashSet<Depart>();
16
17     //父类部门
18     private Depart depart;
19
20     public Long getId() {
21         return id;
22     }
23
24     public void setId(Long id) {
25         this.id = id;
26     }
27
28     public String getName() {
29         return name;
30     }
31
32     public void setName(String name) {
33         this.name = name;
34     }
35
36     public Set<User> getUsers() {
37         return users;
38     }
39
40     public void setUsers(Set<User> users) {
41         this.users = users;
42     }
43
44     public Set<Depart> getDeparts() {
45         return departs;
46     }
47
48     public void setDeparts(Set<Depart> departs) {
49         this.departs = departs;
50     }
51
52     public Depart getDepart() {
53         return depart;
54     }
55
56     public void setDepart(Depart depart) {
57         this.depart = depart;
58     }
59
60     public String getDestion() {
61         return destion;
62     }
63
64     public void setDestion(String destion) {
65         this.destion = destion;
66     }
67
68
69
70 }

测试代码:

  1 package com.qcf.util;
  2
  3 import java.util.ArrayList;
  4 import java.util.Collection;
  5 import java.util.HashSet;
  6 import java.util.List;
  7 import java.util.Set;
  8
  9 import org.aspectj.weaver.patterns.ThisOrTargetAnnotationPointcut;
 10
 11 import com.qcf.po.Depart;
 12
 13 public class PreDepart {
 14
 15     /**
 16      *    结构
 17      *    ┝开发部
 18      *        ┝开发一部
 19      *            ┝开发一组
 20      *            ┝开发二组
 21      *        ┝开发二部
 22      *            ┝开发三组
 23      *            ┝开发四组
 24      *    ┝销售部
 25      *        ┝销售一部
 26      *        ┝销售二部
 27      */
 28     public static List<Depart> findDepartTopList(){
 29         //顶级
 30         Depart depart1=new Depart();
 31         depart1.setName("开发部");
 32
 33         //二级
 34         Depart depart1_1=new Depart();
 35         depart1_1.setName("开发一部");
 36
 37         //三级
 38         Depart depart1_1_1=new Depart();
 39         depart1_1_1.setName("开发一组");
 40         Depart depart1_1_2=new Depart();
 41         depart1_1_2.setName("开发二组");
 42
 43         Set<Depart> departs1_1=new HashSet<Depart>();
 44         departs1_1.add(depart1_1_1);
 45         departs1_1.add(depart1_1_2);
 46         depart1_1.setDeparts(departs1_1);
 47
 48         Depart depart1_2=new Depart();
 49         depart1_2.setName("开发二部");
 50
 51         Depart depart1_2_1=new Depart();
 52         depart1_2_1.setName("开发一组");
 53         Depart depart1_2_2=new Depart();
 54         depart1_2_2.setName("开发二组");
 55
 56         Set<Depart> departs1_2=new HashSet<Depart>();
 57         departs1_2.add(depart1_1_1);
 58         departs1_2.add(depart1_1_2);
 59         depart1_2.setDeparts(departs1_1);
 60
 61         Set<Depart> departs1=new HashSet<Depart>();
 62         departs1.add(depart1_1);
 63         departs1.add(depart1_2);
 64
 65         depart1.setDeparts(departs1);
 66
 67         //顶级
 68         Depart depart2=new Depart();
 69         depart2.setName("销售部");
 70         //二级
 71         Depart depart2_1=new Depart();
 72         depart2_1.setName("销售一部");
 73         Depart depart2_2=new Depart();
 74         depart2_2.setName("销售二部");
 75
 76         Set<Depart> departs=new HashSet<Depart>();
 77         departs.add(depart2_1);
 78         departs.add(depart2_2);
 79
 80         depart2.setDeparts(departs);
 81
 82         List<Depart> list=new ArrayList<Depart>();
 83         list.add(depart1);
 84         list.add(depart2);
 85         return list;
 86     }
 87     public static void main(String[] args) {
 88         List<Depart> list=findDepartTopList();
 89 //        for (Depart depart : list) {
 90 //            getAllDepartName(depart);
 91 //        }
 92         getAllDepartName_2(list,"=");
 93     }
 94
 95     /**将所有的部门打印出来*/
 96     public static void getAllDepartName(Depart depart){
 97         System.out.println(depart.getName());
 98         for (Depart chirden : depart.getDeparts()) {
 99             getAllDepartName(chirden);
100         }
101     }
102
103     /**将所有的部门打印出来*/
104     public static void getAllDepartName_2(Collection<Depart> list,String pre){
105         for (Depart depart2 : list) {
106             System.out.println( pre +depart2.getName());
107             getAllDepartName_2(depart2.getDeparts(),"    "+pre);
108         }
109     }
110 }

时间: 2024-11-25 19:53:07

递归之遍历部门的相关文章

Atitit &#160;循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).

Atitit  循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 1.1. 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称之为循环. 大部分的递归, 遍历, 迭代, 都是循环.1 1.2. 递归的定义是, 根据一种(几种)基本情况定义的算法, 其他复杂情况都可以被逐步还原为基本情况.1 1.3. 递归的基本概念和特点1 1.4. 迭代(数学): 在循环的基础上, 每一次循环, 都比上一次更为接近结果.2 1.5. 编程语言中的循环

【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】

[144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [1,2,3]. Note: Recursive solution

非递归前序遍历二叉树

#include<stdio.h> #include<stdlib.h> //定义结构体 typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiNode,* pBiNode; pBiNode stack[100]; void later(pBiNode * p) //前序创建树 { char ch; scanf("%c",&ch); if(ch=='#') *p=NU

java基础知识回顾之javaIO类--File类应用:递归深度遍历文件

代码如下: package com.lp.ecjtu.File.FileDeepList; import java.io.File; public class FileDeepList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File dir = new File("E:"+File.separator+"demodir

二叉树遍历(递归、非递归,层次遍历(从上往下))

递归算法 void preorder1(Node *root) //递归前序遍历 { if (root == NULL) return; printf("%d ", root->val); preorder1(root->left); preorder1(root->right); } void inorder1(Node *root) //递归中序遍历 { if (root == NULL) return; inorder1(root->left); prin

用递归方式遍历二叉树

问题 思路说明 遍历二叉树的方法有广度优先和深度优先两类,下面阐述的是深度优先. 以下图的二叉树为例: 先定义三个符号标记: 访问结点本身(N) 遍历该结点的左子树(L) 遍历该结点的右子树(R) 有四种方式: 前序遍历(PreorderTraversal,NLR):先访问根结点,然后遍历其左右子树 中序遍历(InorderTraversal,LNR):先访问左子树,然后访问根节点,再访问右子树 后序遍历(PostorderTraversal,LRN):先访问左右子树,再访问根结点 层序遍历(l

每天刷个算法题20160518:非递归二叉树遍历

版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/51502254 为了防止思维僵化,每天刷个算法题.已经刷了几天了,现在贴点代码. 2002年我初中二年级,开始学习BASIC语言.2004年中考之后,开始参加NOIP,系统学习算法.一直非常喜欢算法,但工作后几乎不再碰这些东西.现在准备重新捡起来. 我已经建了一个开源项目,每天的题目都在里面: https://github.com/Xiaofe

你知道python的迭代,循环,递归与遍历怎么使用吗?

首先,英文走一波.循环-loop,迭代-iterate,递归-recursion,遍历-travelsal ●循环:指的是在满足条件的情况下,重复执行同一段代码.比如,while语句. ●迭代:指的是按照某种顺序逐个访问列表中的每一项.比如,for语句 ●递归:指的是一个函数不断调用自身的行为.比如,以编程方式输出著名的斐波那契数列. ●遍历:指的是按照一定规律访问树形结构中的每个节点,而且每个节点都只能访问一次. 逐个访问 在python中逐个访问对象中的每个元素,可以这样做:(例如一个lis

非递归实现遍历二叉树

非递归实现二叉树主要利用queue和stack的特点,对于层次遍历二叉树主要运用queue队头出,队尾插入,先进先出的特点,先将根插入队尾,然后输出队头的元素,同时将队头的左子树和右子树元素插入队尾,依次输出输出队头的元素,同时将队头的左子树和右子树元素插入队尾,直到队列为空. void levelorder() { queue<BinaryTreeNode<T> *>s; if (_root == NULL) return; s.push(_root); while (!s.em