您的位置:首页
构建一个时间复杂度为O(n)的目录树
2017-05-10 18:43
197 查看
public class TreeTest{
public static void test(Multimap<String, TestTreeBean> myMultimap,TestTreeBean bean){
// 1.获取子节点
List<TestTreeBean> childList = (List<TestTreeBean>) myMultimap.get(bean.getId());
// 2.如果子节点已经没有数据跳出循环
if(childList.size()==0){
return;
}else{
// 3.遍历子节点
for (TestTreeBean testTreeBean : childList) {
// 递归当前节点是否有子节点
test(myMultimap, testTreeBean);
}
// 4.构造子节点
bean.setBean(childList);
}
}
public static void main(String[] args) throws Exception {
Multimap<String, TestTreeBean> myMultimap = ArrayListMultimap.create();
List<TestTreeBean> list = new ArrayList<TestTreeBean>();
// 1. 创造一份模拟数据
list.add(new TestTreeBean("1", "0"));// 跟节点
list.add(new TestTreeBean("2", "1"));
list.add(new TestTreeBean("3", "1"));
list.add(new TestTreeBean("4", "2"));
list.add(new TestTreeBean("5", "2"));
list.add(new TestTreeBean("6", "3"));
// 2. 构造一个myMultimap父节点为key,myMultimap是键可以重复的数据结构,谷歌guava提供
for (TestTreeBean testTreeBean : list) {
myMultimap.put(testTreeBean.getPid(), testTreeBean);
}
// 3. 构造一个根节点,次节点可以为任意节点,为了获取此节点下的数据
TestTreeBean bean = new TestTreeBean("1", "0", null);
// 4. 递归构造目录树
test(myMultimap, bean);
System.out.println(JSON.toJSON(bean));
}
}
public class TestTreeBean {
private String id;
private String pid;
private List<TestTreeBean> bean;
public TestTreeBean(String id, String pid) {
super();
this.id = id;
this.pid = pid;
}
public TestTreeBean(String id, String pid, List<TestTreeBean> bean) {
super();
this.id = id;
this.pid = pid;
this.bean = bean;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public List<TestTreeBean> getBean() {
return bean;
}
public void setBean(List<TestTreeBean> bean) {
this.bean = bean;
}
@Override
public String toString() {
return "TestTreeBean [id=" + id + ", pid=" + pid + ", bean=" + bean + "]";
}
public static void test(Multimap<String, TestTreeBean> myMultimap,TestTreeBean bean){
// 1.获取子节点
List<TestTreeBean> childList = (List<TestTreeBean>) myMultimap.get(bean.getId());
// 2.如果子节点已经没有数据跳出循环
if(childList.size()==0){
return;
}else{
// 3.遍历子节点
for (TestTreeBean testTreeBean : childList) {
// 递归当前节点是否有子节点
test(myMultimap, testTreeBean);
}
// 4.构造子节点
bean.setBean(childList);
}
}
public static void main(String[] args) throws Exception {
Multimap<String, TestTreeBean> myMultimap = ArrayListMultimap.create();
List<TestTreeBean> list = new ArrayList<TestTreeBean>();
// 1. 创造一份模拟数据
list.add(new TestTreeBean("1", "0"));// 跟节点
list.add(new TestTreeBean("2", "1"));
list.add(new TestTreeBean("3", "1"));
list.add(new TestTreeBean("4", "2"));
list.add(new TestTreeBean("5", "2"));
list.add(new TestTreeBean("6", "3"));
// 2. 构造一个myMultimap父节点为key,myMultimap是键可以重复的数据结构,谷歌guava提供
for (TestTreeBean testTreeBean : list) {
myMultimap.put(testTreeBean.getPid(), testTreeBean);
}
// 3. 构造一个根节点,次节点可以为任意节点,为了获取此节点下的数据
TestTreeBean bean = new TestTreeBean("1", "0", null);
// 4. 递归构造目录树
test(myMultimap, bean);
System.out.println(JSON.toJSON(bean));
}
}
public class TestTreeBean {
private String id;
private String pid;
private List<TestTreeBean> bean;
public TestTreeBean(String id, String pid) {
super();
this.id = id;
this.pid = pid;
}
public TestTreeBean(String id, String pid, List<TestTreeBean> bean) {
super();
this.id = id;
this.pid = pid;
this.bean = bean;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public List<TestTreeBean> getBean() {
return bean;
}
public void setBean(List<TestTreeBean> bean) {
this.bean = bean;
}
@Override
public String toString() {
return "TestTreeBean [id=" + id + ", pid=" + pid + ", bean=" + bean + "]";
}
相关文章推荐
- 实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 构建二叉堆时间复杂度的证明
- 查找无序数组中的一个元素下标,并分析时间和空间复杂度, 考虑效率(很重要)
- 题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- 实现一个栈,要求实现一个push,pop,min(返回最小值)的时间复杂度为0(1)
- 判断一个数是不是素数 埃拉托斯特尼筛法 时间复杂度 O(n*lglgn)
- 实现一个栈,Push,Pop,Min,并且保证时间复杂度为O(1)
- 【面试题】实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈,Push、Pop、Min的时间复杂度为O(1)【数据结构】
- 转载&nbsp;一个时间复杂度为O(N)的算法
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、 Min(返回最小值的操作)的时间复杂度为O(1)
- 3月24日 想到了一个字符串匹配的新算法 程序 时间复杂度自己不会算
- 实现一个数组中奇数和偶数分开,奇数在前部分,偶数在后部分 时间复杂度为O(n),空间复杂度为O(1)
- 一个整型数组里除了一个或者两个或者三个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 对一个简单递归的 时间复杂度的分析
- 程序员面试金典: 9.3栈与队列 3.2设计一个栈,除pop与push方法,支持返回栈最小元素min方法,时间复杂度均为O(1)