简易的Java树节点
2016-01-09 01:35
411 查看
今天在做一个计算BOM成本的功能,BOM是一个由物料组成的树,规则是如果一个节点有子节点,那么这个节点的成本就是所有子节点之和,做这个功能最直接的想法就是通过递归的方式实现,后面查看到DefaultMutableTreeNode类有个实例方法depthFirstEnumeration(),查询API知道这个方法返回一个枚举,该枚举是已深度优先的顺序遍历此节点为根的子树,于是想自己写个深度遍历的实现,不过代码逻辑还理解不到位,暂时想不出,后续再补上代码。
<pre name="code" class="java">package com.jaws.tree; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; public class TreeNode { private TreeNode parent = null;//父节点 private LinkedList<TreeNode> children = null;//子节点链表 private Object userObject = null; private int depth = 0; { children = new LinkedList<TreeNode>(); } public TreeNode(){ } public TreeNode(Object userObject) { // TODO Auto-generated constructor stub this.userObject = userObject; } public void add(TreeNode newChild){ children.add(newChild);//添加到子节点链表中 newChild.setParent(this);//设置子节点的父节点 } public TreeNode getChildAt(int childIndex){ if (childIndex<0||childIndex>this.children.size()-1) { return null; }else{ return children.get(childIndex); } } public int getChildCount(){ return children.size(); } public TreeNode getParent() { return parent; } void setParent(TreeNode parent) { this.parent = parent; this.depth = parent.getDepth()+1;//设置本节点的深度 } public Object getUserObject() { return userObject; } public void setUserObject(Object userObject) { this.userObject = userObject; } public int getDepth() { return depth; } public boolean isRoot(){ if (parent==null) { return true; }else{ return false; } } public boolean isLeaf(){ if (children == null) { return true; } else { if (children.isEmpty()) { return true; } else { return false; } } } /** * 返回子节点链表的迭代器 * @return */ public Iterator<TreeNode> children(){ return this.children.iterator(); } public java.util.List<TreeNode> getChildren(){ return this.getChildren(); } @Override public String toString() { // TODO Auto-generated method stub return userObject!=null ? userObject.toString() : ""; } @Override public int hashCode() { // TODO Auto-generated method stub return super.hashCode(); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树