首页 > 编程知识 正文

包含java部门递归树的词条

时间:2023-12-29 13:16:42 阅读:329988 作者:OEOB

本文目录一览:

java使用递归实现树形结构

insert tb_menu(id, name, parent) (640000000000,北京市 ,0);

insert tb_menu(id, name, parent) (640100000000,昌平区 ,1);

insert tb_menu(id, name, parent) (640101000000,霍营 ,2);

insert tb_menu(id, name, parent) (640101001000, 回龙观东大街,3);

添加一个节点属性, 根据数据不同代表的地位不同,0就代表父节点 ,1是0的子节点,2是1的子节点,以此类推。

java二叉树递归算法原理

“node.left!=null从根节点开始递归到9,跳出循环输出9,接着判断9的右节点为null;”

你这就话本身就有问题,输出9时,那么node是多少呢,是12,接着是判断12的右节点,而不是9的右节点。

根节点是相对的,

你把9看成左节点,那么12就是根节点,

按照中序遍历规则,左中右,那么输出9就到12有什么奇怪呢,

你把9看成根节点,它也是叶节点,没有左右节点,那么输出9就到12有什么奇怪呢。

你递归不懂就应该看谭浩强的递归分析,而不是来看二叉树。

java树级对象递归查找子集问题

package com.demo.dept;

/**

 * @author dongbin.yu

 * @from 2016-05-06

 * @since V1.0

 */

public class Dept {

    private int id;

    private String name;

    private int parentId;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getParentId() {

        return parentId;

    }

    public void setParentId(int parentId) {

        this.parentId = parentId;

    }

    public Dept(int id, String name, int parentId) {

        this.id = id;

        this.name = name;

        this.parentId = parentId;

    }

}

package com.demo.dept;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

 * @author dongbin.yu

 * @from 2016-05-06

 * @since V1.0

 */

public class DeptTest {

    private static ListDept depts = new ArrayList();

    static{

        depts.add(new Dept(1,"部门1",0));

        depts.add(new Dept(2,"部门2",1));

        depts.add(new Dept(3,"部门3",1));

        depts.add(new Dept(4,"部门4",1));

        depts.add(new Dept(5,"部门5",2));

        depts.add(new Dept(6,"部门6",3));

        depts.add(new Dept(7,"部门7",2));

        depts.add(new Dept(8,"部门8",2));

        depts.add(new Dept(9,"部门9",1));

        depts.add(new Dept(10,"部门10",5));

    }

    public static void main(String[] args) {

        MapInteger, ListInteger deptMap = new HashMap();

        for (Dept dept : depts) {

            deptMap.put(dept.getId(),getChildDept(dept.getId()));

        }

        System.out.println(deptMap);

    }

    private static ListInteger getChildDept(int id){

        ListInteger ids = new ArrayList();

        for (Dept dept : depts) {

            if(dept.getParentId() == id){

                //添加第一次父id符合的

                ids.add(dept.getId());

                //添加嵌套父id符合的

                ids.addAll(getChildDept(dept.getId()));

            }

        }

                Collections.sort(ids);

        return ids;

    }

}

JAVA如何理解递归

1、递归做为一种算法在程序设计语言中广泛使用,是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。

2、递归算法一般用于解决三类问题:

1)数据的定义是按递归定义的。(Fibonacci(斐波那契)的函数)

2)问题解法按递归算法实现。(回溯)

3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)

Java递归如何正确输出树形菜单

首先我们要建立树节点的类:

[java]

view

plain

copy

package

com.tree;

public

class

Node

{

private

Integer

id;

private

Integer

parentId;

private

String

name;

private

String

link;

public

Integer

getId()

{

return

id;

}

public

void

setId(Integer

id)

{

this.id

=

id;

}

public

Integer

getParentId()

{

return

parentId;

}

public

void

setParentId(Integer

parentId)

{

this.parentId

=

parentId;

}

public

String

getName()

{

return

name;

}

public

void

setName(String

name)

{

this.name

=

name;

}

public

String

getLink()

{

return

link;

}

public

void

setLink(String

link)

{

this.link

=

link;

}

}

输出树形菜单类:

[java]

view

plain

copy

package

com.tree;

import

java.util.ArrayList;

import

java.util.List;

public

class

Tree

{

private

StringBuffer

html

=

new

StringBuffer();

private

ListNode

nodes;

public

Tree(ListNode

nodes){

this.nodes

=

nodes;

}

public

String

buildTree(){

html.append("ul");

for

(Node

node

:

nodes)

{

Integer

id

=

node.getId();

if

(node.getParentId()

==

)

{

html.append("rnli

id='"

+

id

+

"'"

+

node.getName()+

"/li");

build(node);

}

}

html.append("rn/ul");

return

html.toString();

}

private

void

build(Node

node){

ListNode

children

=

getChildren(node);

if

(!children.isEmpty())

{

html.append("rnul");

for

(Node

child

:

children)

{

Integer

id

=

child.getId();

html.append("rnli

id='"

+

id

+

"'"

+

child.getName()+

"/li");

build(child);

}

html.append("rn/ul");

}

}

private

ListNode

getChildren(Node

node){

ListNode

children

=

new

ArrayListNode();

Integer

id

=

node.getId();

for

(Node

child

:

nodes)

{

if

(id.equals(child.getParentId()))

{

children.add(child);

}

}

return

children;

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。