当前位置:首页 » 编程语言 » 树结构java

树结构java

发布时间: 2025-06-17 22:50:37

A. 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
}

B. Java 数据结构 - 树与二叉树(一)

Java 数据结构 树与二叉树的核心概念如下

1. 树的抽象数据类型 定义:使用position表示树中的节点,每个元素存储在position中,并遵守树结构中的parentchild关系。 方法:包含访问方法、查询方法和一些更通用的方法。如果树有序,则children将按照顺序返回节点P的子节点。

2. 树接口在Java中的实现 定义Tree接口:扩展Java的iterable类,并使用Position类表达位置概念。 功能:实现树的ADT中定义的各种方法。

3. 计算树的高度和深度 深度:节点p的深度表示从根节点到节点p的唯一路径上的边数。 高度:树的高度等于树中节点的最大深度,即从根节点到最远叶子节点的最长路径上的边数。

4. 二叉树的定义 有序结构:每个内部节点拥有0或2个子节点。 递归定义:二叉树是递归定义的,即一个二叉树要么为空,要么由一个根节点以及两个互不相交的、分别称作左子树和右子树的二叉树组成。

5. 二叉树的ADT 支持操作:除了树ADT支持的操作外,还支持额外的三种树结构数据操作,如获取左子节点、右子节点等。

6. 二叉树抽象基类的实现 方法:包含sibling方法,利用left和right方法提供numChildren和children方法。通过创建一个snapshot来实现children方法。

7. 二叉树的属性 节点数量:二叉树的高度与节点数量呈指数增长,第x层最多拥有2^x个节点。

8. 构建二叉树 方法:使用连接结构构建二叉树,节点追踪当前叶子节点的位置,树存储指向根节点的变量和子节点数量。

9. 更新二叉树方法 添加元素:提供添加元素的方法,操作复杂度为O。

10. 数组实现二叉树 存储:使用数组存储树结构,数据位置直接通过数字Index表达。 子节点父节点关系:通过公式计算子节点和父节点的位置关系。 空间使用:依赖于树形状,更新操作复杂度为O。

11. 链接结构实现二叉树 节点存储:每个节点显示保存左、右2个子节点。 子节点引用:通过给每个节点分配一个容器储存子节点引用。 运行效率:这种形式实现对应的运行效率较高,适用于大多数二叉树操作。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:593
制作脚本网站 发布:2025-10-20 08:17:34 浏览:888
python中的init方法 发布:2025-10-20 08:17:33 浏览:582
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:765
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:684
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1013
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:255
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:114
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:806
python股票数据获取 发布:2025-10-20 07:39:44 浏览:713