本文目录一览:
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("\r\nli
id='"
+
id
+
"'"
+
node.getName()+
"/li");
build(node);
}
}
html.append("\r\n/ul");
return
html.toString();
}
private
void
build(Node
node){
ListNode
children
=
getChildren(node);
if
(!children.isEmpty())
{
html.append("\r\nul");
for
(Node
child
:
children)
{
Integer
id
=
child.getId();
html.append("\r\nli
id='"
+
id
+
"'"
+
child.getName()+
"/li");
build(child);
}
html.append("\r\n/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;
}
}