tree的实现 java, 二叉树的实现

来源:互联网 发布:专业制谱软件 编辑:程序博客网 时间:2024/06/05 22:52

package com.link;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Tree {
 private TreeNode root = new TreeNode();
 private List<TreeNode> nodes = new ArrayList<TreeNode>();
 public TreeNode getRootNode(){
  return root;
 }
 public void addNodes(TreeNode treeNode){
  nodes.add(treeNode);
 }
 /**
  * 移除节点对象
  * @param treeNode 要移除的节点对象
  */
 public void remove(TreeNode treeNode){
  Iterator<TreeNode> iterator = nodes.iterator();
  TreeNode next = null;
  while(iterator.hasNext()){
   next = iterator.next();
   if(next == treeNode){
    nodes.remove(next);
    break;
   }
  }
 }
 /**
  * 根据节点索引移除节点对象
  * @param index 要移除节点对象的索引 以0开始
  */
 public void remove(int index){
  nodes.remove(index);
 }
 /**
  * 根据节点索引获取节点对象
  * @param index 要获取节点对象的索引
  * @return
  */
 public TreeNode getNode(int index){
  return nodes.get(index);
 }
 /**
  * 根据元素的子节点的个数
  * @return
  */
 public int size(){
  return nodes.size();
 }
}
package com.link;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TreeNode {
 private TreeNode parentNode;
 private List<TreeNode> childNodes = new ArrayList<TreeNode>();
 private String value;
 private String text;
 public TreeNode() {
  super();
  // TODO Auto-generated constructor stub
 }
 /**
  * 构造方法
  * @param value 值
  * @param text 文本
  */
 public TreeNode(String value, String text) {
  super();
  this.value = value;
  this.text = text;
 }
 /**
  * 获取父节点
  * @return 返回节点对象
  */
 public TreeNode getParentNode() {
  return parentNode;
 }
 /**
  * 设置父节点对象
  * @param parentNode 要设置的对象
  */
 public void setParentNode(TreeNode parentNode) {
  this.parentNode = parentNode;
 }
 /**
  * 获取子节点
  * @return
  */
 public List<TreeNode> getChildNodes() {
  return childNodes;
 }
 /**
  * 设置子节点
  * @param childNodes
  */
 public void setChildNodes(List<TreeNode> childNodes) {
  this.childNodes = childNodes;
 }
 public String getValue() {
  return value;
 }
 public void setValue(String value) {
  this.value = value;
 }
 public String getText() {
  return text;
 }
 public void setText(String text) {
  this.text = text;
 } 
 /**
  * 添加子节点
  * @param treeNode
  */
 public void addChildNode(TreeNode treeNode){
  treeNode.parentNode = this;
  childNodes.add(treeNode);
  
 }
 /**
  * 移除节点对象
  * @param treeNode 要移除的节点对象
  */
 public void removechildNode(TreeNode treeNode){
  Iterator<TreeNode> iterator = childNodes.iterator();
  TreeNode next = null;
  while(iterator.hasNext()){
   next = iterator.next();
   if(next == treeNode){
    childNodes.remove(next);
    break;
   }
  }
 }
 /**
  * 根据索引移除节点
  * @param index 要移除节点的子节点
  */
 public void removechildNode(int index){
  childNodes.remove(index);
 }
 /**
  * 根据索引获取子节点
  * @param index
  * @return
  */
 public TreeNode getChildNode(int index){
  return  childNodes.get(index);
 }
 /**
  * 返回子节点个数
  * @return
  */
 public int childNodeSize(){
  return childNodes.size();
 }

}
package com.link;

public class TreeTest {
 public static void main(String[] args) {
   Tree tree = new Tree();
   
   tree.addNodes(new TreeNode("1", "a"));
   tree.addNodes(new TreeNode("2", "b"));
   tree.addNodes(new TreeNode("3", "c"));
   tree.addNodes(new TreeNode("4", "d"));
   tree.getNode(0).addChildNode(new TreeNode("11","aa"));
   tree.getNode(0).addChildNode(new TreeNode("12","bb"));
   tree.getNode(0).addChildNode(new TreeNode("13","cc"));
   tree.getNode(0).addChildNode(new TreeNode("14","dd"));
   tree.getNode(1).addChildNode(new TreeNode("21","aa1"));
   tree.getNode(1).addChildNode(new TreeNode("22","bb1"));
   tree.getNode(1).addChildNode(new TreeNode("23","cc1"));
   tree.getNode(1).addChildNode(new TreeNode("24","dd1"));
   tree.getNode(3).addChildNode(new TreeNode("31","aa13"));
   tree.getNode(3).addChildNode(new TreeNode("32","bb13"));
   tree.getNode(3).addChildNode(new TreeNode("33","cc13"));
   tree.getNode(3).addChildNode(new TreeNode("34","dd13"));
   TreeNode node = new TreeNode();
   for(int i =0 ;i<tree.size();i++){
    for(int j =0 ;j<tree.getNode(i).childNodeSize();j++){
     node = tree.getNode(i).getChildNode(j);
     System.out.println("i:"+i+",j:"+j+",---"+node.getText() +",parent:"+ node.getParentNode().getText());
    }
    
   }
 }
}

原创粉丝点击