java多叉树_java多叉树的生成和遍历

转载另外一个关于多叉树的实现类:

TreeNode.java

/*

* Copyright Walker Studio

* All Rights Reserved.

*

* 文件名称: TreeNode.java

* 摘 要:

* 作 者: Walker

* 创建时间: 2013-03-19

*/

package com.walker.commons.data.model;

/**

* 树节点

*

* @author Walker

* @version 1.0.0.0

*/

public class TreeNode

{

/** 节点Id*/

private String nodeId;

/** 父节点Id*/

private String parentId;

/** 文本内容*/

private String text;

/**

* 构造函数

*

* @param nodeId 节点Id

*/

public TreeNode(String nodeId)

{

this.nodeId = nodeId;

}

/**

* 构造函数

*

* @param nodeId 节点Id

* @param parentId 父节点Id

*/

public TreeNode(String nodeId, String parentId)

{

this.nodeId = nodeId;

this.parentId = parentId;

}

public String getNodeId() {

return nodeId;

}

public void setNodeId(String nodeId) {

this.nodeId = nodeId;

}

public String getParentId() {

return parentId;

}

public void setParentId(String parentId) {

this.parentId = parentId;

}

public String getText() {

return text;

}

public void setText(String text) {

this.text = text;

}

}

ManyTreeNode.java

/*

* Copyright Walker Studio

* All Rights Reserved.

*

* 文件名称: ManyTreeNode.java

* 摘 要:

* 作 者: Walker

* 创建时间: 2013-03-19

*/

package com.walker.commons.data.model;

import java.util.ArrayList;

import java.util.List;

/**

* 多叉树节点

*

* @author Walker

* @verion 1.0.0.0

*/

public class ManyTreeNode

{

/** 树节点*/

private TreeNode data;

/** 子树集合*/

private List childList;

/**

* 构造函数

*

* @param data 树节点

*/

public ManyTreeNode(TreeNode data)

{

this.data = data;

this.childList = new ArrayList();

}

/**

* 构造函数

*

* @param data 树节点

* @param childList 子树集合

*/

public ManyTreeNode(TreeNode data, List childList)

{

this.data = data;

this.childList = childList;

}

public TreeNode getData() {

return data;

}

public void setData(TreeNode data) {

this.data = data;

}

public List getChildList() {

return childList;

}

public void setChildList(List childList) {

this.childList = childList;

}

}

ManyNodeTree.java

/*

* Copyright Walker Studio

* All Rights Reserved.

*

* 文件名称: ManyNodeTree.java

* 摘 要:

* 作 者: Walker

* 创建时间: 2013-03-19

*/

package com.walker.commons.data.model;

import java.util.ArrayList;

import java.util.List;

/**

* 多叉树生成、遍历工具

*

* @author Walker

* @version 1.0.0.0

*/

public class ManyNodeTree

{

/** 树根*/

private ManyTreeNode root;

/**

* 构造函数

*/

public ManyNodeTree()

{

root = new ManyTreeNode(new TreeNode("root"));

}

/**

* 生成一颗多叉树,根节点为root

*

* @param treeNodes 生成多叉树的节点集合

* @return ManyNodeTree

*/

public ManyNodeTree createTree(List treeNodes)

{

if(treeNodes == null || treeNodes.size() < 0)

return null;

ManyNodeTree manyNodeTree = new ManyNodeTree();

//将所有节点添加到多叉树中

for(TreeNode treeNode : treeNodes)

{

if(treeNode.getParentId().equals("root"))

{

//向根添加一个节点

manyNodeTree.getRoot().getChildList().add(new ManyTreeNode(treeNode));

}

else

{

addChild(manyNodeTree.getRoot(), treeNode);

}

}

return manyNodeTree;

}

/**

* 向指定多叉树节点添加子节点

*

* @param manyTreeNode 多叉树节点

* @param child 节点

*/

public void addChild(ManyTreeNode manyTreeNode, TreeNode child)

{

for(ManyTreeNode item : manyTreeNode.getChildList())

{

if(item.getData().getNodeId().equals(child.getParentId()))

{

//找到对应的父亲

item.getChildList().add(new ManyTreeNode(child));

break;

}

else

{

if(item.getChildList() != null && item.getChildList().size() > 0)

{

addChild(item, child);

}

}

}

}

/**

* 遍历多叉树

*

* @param manyTreeNode 多叉树节点

* @return

*/

public String iteratorTree(ManyTreeNode manyTreeNode)

{

StringBuilder buffer = new StringBuilder();

buffer.append("\n");

if(manyTreeNode != null)

{

for (ManyTreeNode index : manyTreeNode.getChildList())

{

buffer.append(index.getData().getNodeId()+ ",");

if (index.getChildList() != null && index.getChildList().size() > 0 )

{

buffer.append(iteratorTree(index));

}

}

}

buffer.append("\n");

return buffer.toString();

}

public ManyTreeNode getRoot() {

return root;

}

public void setRoot(ManyTreeNode root) {

this.root = root;

}

public static void main(String[] args)

{

List treeNodes = new ArrayList();

treeNodes.add(new TreeNode("系统权限管理", "root"));

treeNodes.add(new TreeNode("用户管理", "系统权限管理"));

treeNodes.add(new TreeNode("角色管理", "系统权限管理"));

treeNodes.add(new TreeNode("组管理", "系统权限管理"));

treeNodes.add(new TreeNode("用户菜单管理", "系统权限管理"));

treeNodes.add(new TreeNode("角色菜单管理", "系统权限管理"));

treeNodes.add(new TreeNode("用户权限管理", "系统权限管理"));

treeNodes.add(new TreeNode("站内信", "root"));

treeNodes.add(new TreeNode("写信", "站内信"));

treeNodes.add(new TreeNode("收信", "站内信"));

treeNodes.add(new TreeNode("草稿", "站内信"));

ManyNodeTree tree = new ManyNodeTree();

System.out.println(tree.iteratorTree(tree.createTree(treeNodes).getRoot()));

}

}

可以与之前的另外一篇:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值