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实现树形结构

上一篇:常用面试sql语句


下一篇:Yii2 如何输出 sql 语句?