Scala实现树形结构
package graphx import java.util.ArrayList
import java.util.List /**
* Created by zhen on 2018/12/28.
*/
object TreeParent { class Node {
var id: String = ""
var parent: Int = 0 def this(id: String) {
this()
this.id = id
} def this(id: String, parent: Int) {
this()
this.id = id
this.parent = parent
} override def toString: String = {
return "TreeParent$Node [id=" + id + ", parent=" + parent + "]"
}
}
} class TreeParent {
private val list : List[TreeParent.Node] = new ArrayList[TreeParent.Node]()
private var nodeNums: Int = 0 /**
* 指定根节点创建树
*/
def this(id: String) {
this()
list.add(new TreeParent.Node(id, -1))
nodeNums += 1
} /**
* 指定根节点、指定treeSize创建树
*/
def this(id: String, treeSize: Int) {
this()
list.add(new TreeParent.Node(id, -1))
nodeNums += 1
} /**
* 获取某个节点的索引值
*/
def getNodeIndex(node: TreeParent.Node): Int = {
for(i<- 0 until list.size())
{
if (list.get(i) eq node) {
return i
}
}
return -1
} /**
* 为指定节点添加子节点
*/
def addNode(id: String, parent: TreeParent.Node) {
list.add(new TreeParent.Node(id, getNodeIndex(parent)))
} /**
* 判断树是否为空
*/
def isEmpty: Boolean = {
return list.get(0) == null
} /**
* 返回根节点
*/
def getRoot: TreeParent.Node = {
return list.get(0)
} /**
* 返回指定节点(非根节点)的父节点
*/
def getParent(node: TreeParent.Node): TreeParent.Node = {
return list.get(node.parent)
} def getNodeByid(id: String): TreeParent.Node = {
for(i<- 0 until list.size())
{
if (list.get(i).id eq id) {
return list.get(i)
}
}
System.out.println("树中不存在包含该数据的节点")
return null
} /**
* 返回指定节点(非叶子节点)的所有子节点
*/
def getChildren(parent: TreeParent.Node): List[TreeParent.Node] = {
val childrenList : List[TreeParent.Node] = new ArrayList[TreeParent.Node]()
for(i <- 0 until list.size()){
if (list.get(i) != null && list.get(i).parent == getNodeIndex(parent)) {
childrenList.add(list.get(i))
}
}
return childrenList
}
} object TreeAI {
def main(args: Array[String]) {
val tree: TreeParent = new TreeParent("root")
val root: TreeParent.Node = tree.getRoot
System.out.println(root)
tree.addNode("A", root)
tree.addNode("B", root)
val A: TreeParent.Node = tree.getNodeByid("A")
val B: TreeParent.Node = tree.getNodeByid("B")
tree.addNode("C", A)
tree.addNode("D", A)
tree.addNode("E", B)
tree.addNode("F", B)
tree.addNode("G", B)
tree.addNode("H", root)
val H: TreeParent.Node = tree.getNodeByid("H")
tree.addNode("I", H)
val list: List[TreeParent.Node] = tree.getChildren(root)
System.out.println("A节点的子节点为:")
import scala.collection.JavaConversions._
for (node <- list) {
System.out.println(node)
}
}
}
结果:

Scala实现树形结构的更多相关文章
- js文章列表的树形结构输出
文章表设计成这样了 后端直接给了无任何处理的json数据,现在要前端实现树形结构的输出,其实后端处理更简单写,不过既然来了就码出来 var doclist = [{ "id": 1 ...
- GridView 树形结构分组的功能
在“会飞的鱼”博客中看到GridView实现树形结构的代码,经过修改,添加了树形结构中的复选框功能,欢迎吐槽. 源地址:http://www.cnblogs.com/chhuic/archive/20 ...
- [从产品角度学EXCEL 02]-EXCEL里的树形结构
这是<从产品角度学EXCEL>系列第三篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 或者你可以去微信公众号@尾巴说数 获得连载目录. 本文仅由尾巴本人发布 ...
- C# EasyUI树形结构权限管理模块
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节和大家探讨下C#使用EasyUI树形结构/Tree构 ...
- YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计
树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>政府>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排 ...
- Java创建树形结构算法实例
在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBe ...
- Atitit 常见的树形结构 红黑树 二叉树 B树 B+树 Trie树 attilax理解与总结
Atitit 常见的树形结构 红黑树 二叉树 B树 B+树 Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...
- 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件
看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...
- Linux/Ubuntu tree 命令以树形结构显示文件夹目录结构
1.安装命令工具 sudo apt-get -y install tree 2.可以查看关于tree命令的帮助信息 $ tree --help usage: tree [-adfghilnpqrstu ...
随机推荐
- Win32之隐藏DLL隐藏模块技术
Win32之隐藏DLL隐藏模块技术 这一讲涉及到windows底层技术.跟汇编内容. 我们才可以实现模块隐藏(也称为DLL隐藏) 一丶API反汇编勾引兴趣 我们都用过Windows的进程跟线程API ...
- Win32文件系统编程
Win32文件系统编程 一丶了解什么是文件系统 文件系统是抽象的.是windows在软件层面提供的一层虚拟的数据结构. 文件系统分为NTFS 跟 FAT32. 具体看看两者的区别吧. 磁盘分区容量. ...
- Spring Cloud Config采用数据库存储配置内容
在之前的<Spring Cloud构建微服务架构:分布式配置中心>一文中,我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息存储.这一设计巧妙的利用Gi ...
- 南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数
问题1 用来测试的,就不说了 问题2:中位数附近2k+1个数 给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及 ...
- C# 隐式转换关键字 implicit
implicit 关键字用于声明隐式的用户定义类型转换运算符. 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 引用摘自:implicit(C# 参考 ...
- [转]认识JWT
本文转自:https://www.cnblogs.com/cjsblog/p/9277677.html 1. JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准 ...
- [转]innodb的锁时间
本文转自:https://www.cnblogs.com/sunss/p/3170132.html 观察innodb的锁时间,需要关注: mysqladmin extended-status -r - ...
- WCF SqlParameter序列化问题解决方案
博文 http://www.cnblogs.com/pan11jing/archive/2011/08/19/2051827.html 通过自定义类,再在WCF端转换的方式解决问题,之后出现了一个很小 ...
- springMVC_07乱码及restful风格
乱码的解决 通过过滤器解决乱码问题:CharacterEncodingFilter 配置web.xml文件 <filter> <filter-name>encoding< ...
- springMVC_01认识springMVC
一. MVC作用 将url映射到java类或者java类的方法 封装用户提交的数据 处理请求,调用相关业务处理,封装响应的数据 将响应数据进行渲染 一. SpringMVC 是一个轻量级的,基 ...