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. Go语言下的线程模型

    阅读Go并发编程对go语言线程模型的笔记,解释的非常到,好记性不如烂笔头,忘记的时候回来翻一番,在此做下笔记. Go语言的线程实现模型,又3个必知的核心元素,他们支撑起了这个线程实现模型的主要框架: ...

  2. HBase 在人工智能场景的使用

    近几年来,人工智能逐渐火热起来,特别是和大数据一起结合使用.人工智能的主要场景又包括图像能力.语音能力.自然语言处理能力和用户画像能力等等.这些场景我们都需要处理海量的数据,处理完的数据一般都需要存储 ...

  3. noteless的博客导航页 所有文章的导航页面

    导航  <spring springmvc mybatis maven 项目整合示例系列-导航页> <JAVA 基础知识点拾遗系列 JAVA学习 -1层  导航页> <计 ...

  4. solr查询工作原理深入内幕

    1.什么是Lucene? 作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用, ...

  5. Oracle 如何开启归档模式

    Oracle开启归档 场景:某所的数据库没有开启归档,如何开启归档模式的文档. 1.查看oracle归档状态 SQL> archive log list; 数据库日志模式 非存档模式 //目前不 ...

  6. 前端(一)之 HTML

    前端之 HTML 前言 python 基础.网络编程.并发编程与数据库要开始告一段落了,从现在开始进入前端的学习.前端的东西多且杂,需要好好地练习. 什么是前端 前端即网站前台部分,运行在 PC 端, ...

  7. spark集群的简单测试和基础命令的使用

    写此篇文章之前,已经搭建好spark集群并测试成功: spark集群搭建文章链接:http://www.cnblogs.com/mmzs/p/8193707.html 一.启动环境 由于每次都要启动, ...

  8. [转]js 取得 Unix时间戳(Unix timestamp)

    本文转自:https://blog.csdn.net/o0snow/article/details/6858829 js 取得 Unix时间戳 Unix时间戳(Unix timestamp),或称Un ...

  9. 第一册:lesson 11.

    原文:Is this your shirt? A:Whose shirt is that? Is this your shirt B? B:NO,sir. It's not my shirt.This ...

  10. 【转载】C#防SQL注入过滤危险字符信息

    不过是java开发还是C#开发或者PHP的开发中,都需要关注SQL注入攻击的安全性问题,为了保证客户端提交过来的数据不会产生SQL注入的风险,我们需要对接收的数据进行危险字符过滤来防范SQL注入攻击的 ...