基于 链表法 父亲长子兄弟模型树的实现 -java
来源:互联网 发布:美工每天忙吗 编辑:程序博客网 时间:2024/06/11 17:49
关于树的性质,不用多说了。
利用父亲长子兄弟模型 用java来实现了树的结构及基本操作
直接上代码:
树的ADT:
package Tree;/** *树的ADT *父亲 长子 弟弟 模型 * @author coffee * */public interface Tree {//得到当前节点的对象public Object getElement();//设置当前节点的对象public Object setElement(Object Element);//得到当前节点的深度public int getDepth();//得到当前节点的高度public int getHeight();//返回父节点public TreeLinkedListNode getParent();//得到第一个孩子public TreeLinkedListNode getFirstChild();//得到下一个兄弟public TreeLinkedListNode getNextSubling();//得到当前节点为根的树的规模public int getSize();}
树的实现:
package Tree;/** * 链表法 父亲长子兄弟模型 * @author coffee */public class TreeLinkedListNode implements Tree{private Object element;//元素private TreeLinkedListNode parent; //父亲private TreeLinkedListNode firstChild;//第一个孩子private TreeLinkedListNode nextSibling;//下一个兄弟;public TreeLinkedListNode(Object Element,TreeLinkedListNode parent,TreeLinkedListNode firshChild,TreeLinkedListNode nextSibling){this.element=Element;this.parent=parent;this.firstChild=firshChild;this.nextSibling=nextSibling;}public TreeLinkedListNode (){this(null,null,null,null);}/** * 返回当前节点的深度 深度是根到此节点的路径长度 * depth(v)=depth(u)+1; *时间复杂度为On; */@Overridepublic int getDepth() {int depth=0;//跟节点的深度为0;初始化为0TreeLinkedListNode p = parent;while(p!=null){depth++;p = p.getParent(); //指向上一个父亲 直到父节点为null 到根节点 由于是尾递归,所以写成了遍历的形式}return depth;}/** * 用计算子节点的个数同样算出当前节点的高度 * height(v)>=height(u)+1; 如果 u为v的孩子节点 * height(v)=1+max(height(u)) u为所有孩子 * 父亲孩子兄弟模型递归方法 * @return */@Overridepublic int getHeight() {int height= -1; //叶子节点高度为0 所以初始值为-1TreeLinkedListNode subtree = firstChild;//从第一个孩子开始while(subtree!=null){height=Math.max(height,subtree.getHeight()); //返回在孩子中取得最大的高度 依次比较 nextSibling的高度和第一个孩子的高度subtree=subtree.nextSibling;}return height+1;}@Overridepublic TreeLinkedListNode getNextSubling() {return null;}/* *递归的算出当前节点所有子节点个数 *如果不计算递归 算法可以在N的时间复杂度算出size的大小 *父亲长子兄弟模型递归方法 */@Overridepublic int getSize() {int size=1;//当前及节点也是本节点的子节点 叶子节点的size就是1 ,所以初始值为1 TreeLinkedListNode subtree=firstChild; //从第一个节点开始while(subtree!=null){size+=subtree.getSize();subtree=subtree.nextSibling; //一定是子节点的兄弟节点 }return size;}//返回当前元素 设置新的元素@Overridepublic Object setElement(Object Element) {Object temp= element;element=Element;return temp;}@Overridepublic Object getElement() { return element;}public TreeLinkedListNode getParent() {return parent;}public TreeLinkedListNode getFirstChild() {return firstChild;}}
0 0
- 基于 链表法 父亲长子兄弟模型树的实现 -java
- 基于jdk的list 和 队列 linkedList 和父亲长子兄弟链表模型 实现的 树 的前序遍历,后序遍历和层次遍历
- jquery 的兄弟 父亲 孩子的方法
- 基于C/S模型的java实现
- 基于JAVA实现的生产者消费者模型
- TP实现找父亲节点的树
- js当中获取父亲,兄弟,孩子结点的方法小结
- jquery 获取所有兄弟节点、父亲兄弟的子节点以及自动触发事件
- java实现兄弟孩子树代码
- 树的孩子兄弟链表实现
- 最公共长子序列的长度
- 自然语言处理基于java实现(4) 之 基于VSM模型的信息检索程序
- 基于WSAEventSelect模型的TCP服务器实现
- 基于组件的业务模型---实现框架
- 基于QT实现的生产者消费者模型
- 基于Python的Xgboost模型实现
- TensorFlow实现基于LSTM的语言模型
- 基于linux系统的CS模型实现
- MySQL 基本命令大全
- 发现一个thinkphp BUG
- 依赖名称不是类型[关于模板类中的迭代器]
- shader之旅-5-加入光照
- c++类设计思考
- 基于 链表法 父亲长子兄弟模型树的实现 -java
- Linux一些用到的命令
- Java 的swing.GroupLayout布局管理器的使用方法和实例
- 辨舌
- Linux SSH免密码登录
- 搭建高可用mongodb集群(一)——配置mongodb
- ip 转换淘宝接口
- Cocos2d-html5 for Android/ios 定时器的实现方法
- AsyncHttpClient 源码分析