「java递归树形结构」java实现递归树形结构

博主:adminadmin 2023-01-21 14:36:11 36

今天给各位分享java递归树形结构的知识,其中也会对java实现递归树形结构进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何用Java实现树形结构啊?

package tree;

import java.util.LinkedList;

import java.util.List;

/**

* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历

*

* 参考资料0:数据结构(C语言版)严蔚敏

*

* 参考资料1:

*

* 参考资料2:

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

public class BinTreeTraverse2 {

private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

private static ListNode nodeList = null;

/**

* 内部类:节点

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

private static class Node {

Node leftChild;

Node rightChild;

int data;

Node(int newData) {

leftChild = null;

rightChild = null;

data = newData;

}

}

public void createBinTree() {

nodeList = new LinkedListNode();

// 将一个数组的值依次转换为Node节点

for (int nodeIndex = 0; nodeIndex array.length; nodeIndex++) {

nodeList.add(new Node(array[nodeIndex]));

}

// 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树

for (int parentIndex = 0; parentIndex array.length / 2 - 1; parentIndex++) {

// 左孩子

nodeList.get(parentIndex).leftChild = nodeList

.get(parentIndex * 2 + 1);

// 右孩子

nodeList.get(parentIndex).rightChild = nodeList

.get(parentIndex * 2 + 2);

}

// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理

int lastParentIndex = array.length / 2 - 1;

// 左孩子

nodeList.get(lastParentIndex).leftChild = nodeList

.get(lastParentIndex * 2 + 1);

// 右孩子,如果数组的长度为奇数才建立右孩子

if (array.length % 2 == 1) {

nodeList.get(lastParentIndex).rightChild = nodeList

.get(lastParentIndex * 2 + 2);

}

}

/**

* 先序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void preOrderTraverse(Node node) {

if (node == null)

return;

System.out.print(node.data + " ");

preOrderTraverse(node.leftChild);

preOrderTraverse(node.rightChild);

}

/**

* 中序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void inOrderTraverse(Node node) {

if (node == null)

return;

inOrderTraverse(node.leftChild);

System.out.print(node.data + " ");

inOrderTraverse(node.rightChild);

}

/**

* 后序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void postOrderTraverse(Node node) {

if (node == null)

return;

postOrderTraverse(node.leftChild);

postOrderTraverse(node.rightChild);

System.out.print(node.data + " ");

}

public static void main(String[] args) {

BinTreeTraverse2 binTree = new BinTreeTraverse2();

binTree.createBinTree();

// nodeList中第0个索引处的值即为根节点

Node root = nodeList.get(0);

System.out.println("先序遍历:");

preOrderTraverse(root);

System.out.println();

System.out.println("中序遍历:");

inOrderTraverse(root);

System.out.println();

System.out.println("后序遍历:");

postOrderTraverse(root);

}

}

java 递归数据库生成 树形结构问题

1、准备表结构及对应的表数据

a、表结构:

create table TB_TREE

(

CID NUMBER not null,

CNAME VARCHAR2(50),

PID NUMBER //父节点

)

b、表数据:

insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0);

insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1);

insert into tb_tree (CID, CNAME, PID) values (3, '广东省', 1);

insert into tb_tree (CID, CNAME, PID) values (4, '上海市', 1);

insert into tb_tree (CID, CNAME, PID) values (5, '广州市', 3);

insert into tb_tree (CID, CNAME, PID) values (6, '深圳市', 3);

insert into tb_tree (CID, CNAME, PID) values (7, '海珠区', 5);

insert into tb_tree (CID, CNAME, PID) values (8, '天河区', 5);

insert into tb_tree (CID, CNAME, PID) values (9, '福田区', 6);

insert into tb_tree (CID, CNAME, PID) values (10, '南山区', 6);

insert into tb_tree (CID, CNAME, PID) values (11, '密云县', 2);

insert into tb_tree (CID, CNAME, PID) values (12, '浦东', 4);

2、TreeNode对象,对应tb_tree

public class TreeNode implements Serializable {

private Integer cid;

private String cname;

private Integer pid;

private List nodes = new ArrayList();

public TreeNode() {

}

//getter、setter省略

}

3、测试数据

public class TreeNodeTest {

@Test

public void loadTree() throws Exception{

System.out.println(JsonUtils.javaToJson(recursiveTree(1)));

}

/**

* 递归算法解析成树形结构

*

* @param cid

* @return

* @author jiqinlin

*/

public TreeNode recursiveTree(int cid) {

//根据cid获取节点对象(SELECT * FROM tb_tree t WHERE t.cid=?)

TreeNode node = personService.getreeNode(cid);

//查询cid下的所有子节点(SELECT * FROM tb_tree t WHERE t.pid=?)

List childTreeNodes = personService.queryTreeNode(cid);

//遍历子节点

for(TreeNode child : childTreeNodes){

TreeNode n = recursiveTree(child.getCid()); //递归

node.getNodes().add(n);

}

return node;

}

}

输出的json格式如下:

{

"cid": 1,

"nodes": [

{

"cid": 2,

"nodes": [

{

"cid": 11,

"nodes": [

],

"cname": "密云县",

"pid": 2

}

],

"cname": "北京市",

"pid": 1

},

{

"cid": 3,

"nodes": [

{

"cid": 5,

"nodes": [

{

"cid": 7,

"nodes": [

],

"cname": "海珠区",

"pid": 5

},

{

"cid": 8,

"nodes": [

],

"cname": "天河区",

"pid": 5

}

],

"cname": "广州市",

"pid": 3

},

{

"cid": 6,

"nodes": [

{

"cid": 9,

"nodes": [

],

"cname": "福田区",

"pid": 6

},

{

"cid": 10,

"nodes": [

],

"cname": "南山区",

"pid": 6

}

],

"cname": "深圳市",

"pid": 3

}

],

"cname": "广东省",

"pid": 1

},

{

"cid": 4,

"nodes": [

{

"cid": 12,

"nodes": [

],

"cname": "浦东",

"pid": 4

}

],

"cname": "上海市",

"pid": 1

}

],

"cname": "中国",

"pid": 0

}

「java递归树形结构」java实现递归树形结构

java 怎么把数据库 ID PID(父ID) NAME 三个字段 数据递归处理成树形结构 首ID的PID为0

如果数据库是oracle,可以用递归的sql实现

如果想用java实现

第一步遍历节点放入map结构

再次遍历节点,取出当前节点的父节点,parentNode.setchild(courrentNode)

这样第二次遍历完后已经是树形结构了。

从map中取出root节点就行

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 目录树如何检索子级返回

Java中使用递归算法实现查找树形结构中所有父级和子级节点,用递归加一个全局变量标记是否已经找到,然后返回。

截取后面的一段例子:

if (list[i].ID.Equals(id) || found)

found = true;

return;

拓展资料

递归查询子级节点

1.一个节点可能有多个子级节点,每个自己节点可能还有更多的子级节点。

2.所以递归时的参数用一个list来接受,首先遍历参数list,分别查询pid为参数id的对象。

3.每一个参数id所查询返回的数据是一个对象的list。

4.遍历list获取符合条件的对象的id值,一份存到temp中用作递归的参数,并存到全局变量中用来获取所有符合条件的id。

java递归树形结构的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java实现递归树形结构、java递归树形结构的信息别忘了在本站进行查找喔。

The End

发布于:2023-01-21,除非注明,否则均为首码项目网原创文章,转载请注明出处。