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实现树形结构的更多相关文章

  1. js文章列表的树形结构输出

    文章表设计成这样了 后端直接给了无任何处理的json数据,现在要前端实现树形结构的输出,其实后端处理更简单写,不过既然来了就码出来 var doclist = [{ "id": 1 ...

  2. GridView 树形结构分组的功能

    在“会飞的鱼”博客中看到GridView实现树形结构的代码,经过修改,添加了树形结构中的复选框功能,欢迎吐槽. 源地址:http://www.cnblogs.com/chhuic/archive/20 ...

  3. [从产品角度学EXCEL 02]-EXCEL里的树形结构

    这是<从产品角度学EXCEL>系列第三篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 或者你可以去微信公众号@尾巴说数 获得连载目录. 本文仅由尾巴本人发布 ...

  4. C# EasyUI树形结构权限管理模块

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节和大家探讨下C#使用EasyUI树形结构/Tree构 ...

  5. YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计

    树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>政府>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排 ...

  6. Java创建树形结构算法实例

    在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBe ...

  7. Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结

    Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...

  8. 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件

    看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...

  9. Linux/Ubuntu tree 命令以树形结构显示文件夹目录结构

    1.安装命令工具 sudo apt-get -y install tree 2.可以查看关于tree命令的帮助信息 $ tree --help usage: tree [-adfghilnpqrstu ...

随机推荐

  1. 如何用chrome注册版权登记系统

    版权登记系统的网址: http://apply.ccopyright.com.cn/goadatadic/registergetList.do 打开网站,一股古朴的气息扑面而来,嗯,一看就是IE时代的 ...

  2. Salesforce Sales Cloud 零基础学习(一) Product 和 Price Book

    以前的博客大部分都是基于force.com以及lightning展开的自定义开发,其实salesforce提供了很多的标准的功能以及平台, Sales Cloud便是作为Salesforce核心的平台 ...

  3. Java 基础:hashCode方法

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 一.前言 泥瓦匠最近被项目搞的天昏地暗.发现有些要给自己一些目标,关于技术的目标: 专注很重要.专注J ...

  4. struts2整合uploadify插件怎样传参数

    关于uploadify3.1,先看下帮助文档中的有些知识. 其中有个onUploadStart方法,我们可以使用这个向后台传参. 下面举个例子, js: <script type="t ...

  5. TCP/IP 笔记 - 安全

    安全:可扩展身份认证协议.IP安全协议.传输层安全.DNS安全.域名密钥识别邮件 任何由用户或以用户账号执行却违背了用户本身意愿的软件被称为恶意软件 网络安全是一门十分广泛及有深度的学识,而本书旨在了 ...

  6. 【EF6学习笔记】(七)读取关联数据

    本篇参考原文链接:Reading Related Data 本章主要讲述加载显示关联数据: 数据加载分为以下三种 Lazy loading 这种加载方式在于需要用到这个导航属性数据的时候,才会去数据库 ...

  7. 使用xmanager接收图形界面

    假设在win(192.168.0.101)上安装了xmanager,想接收来自linux(192.168.100.16)的图形界面. 1.在win端打开Xmanager - Passive 2.在li ...

  8. C# 委托 事件

    一:什么叫委托 通过反射发现,委托其实是一个类,继承自System.MulticastDelegate,但是System.MulticastDelegate这个类是特殊类,不能被继承 二:委托的声明 ...

  9. 第一册:lesson eighty nine.

    原文: For sale. A:Good afternoon. I believe that the house is for sale. B:That's right. A:May I have a ...

  10. WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决

    背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助! 一.问题 WinForm DataGridView 绑定泛型List (List<T>)/ArrayList不显示,UI ...