`

java的树(较完整)

阅读更多

用java实现的一个树的存储结构,以及存储和取出树信息

package pattern;

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

public class TreeNode implements java.io.Serializable
{
private int parentId;
private int selfId;
protected String nodeName; //protected Point p;
protected TreeNode parentNode;
protected List<TreeNode> childList;

public TreeNode()
{
   initChildList();
}

public TreeNode(String nodeName,int selfId,int parentId)
{
//   this.setParentNode(parentNode);
   this.setNodeName(nodeName);
   this.setParentId(parentId);
   this.setSelfId(selfId);
   initChildList();
}

public TreeNode(TreeNode parentNode,String nodeName,int selfId,int parentId)
{
   this.setParentNode(parentNode);
   this.setNodeName(nodeName);
   this.setParentId(parentId);
   this.setSelfId(selfId);
   initChildList();
}

public boolean isLeaf()
{
   if (childList == null)
   {
    return true;
   }
   else
   {
    if (childList.isEmpty())
    {
     return true;
    }
    else
    {
     return false;
    }
   }
}


public void addChildNode(TreeNode treeNode)
{
   initChildList();
   childList.add(treeNode);
}

public void initChildList()
{
   if (childList == null)
    childList = new ArrayList<TreeNode>();
}


public List<TreeNode> getElders()
{
   //havn't finish! 参见另一个版本。
   List<TreeNode> elderList = new ArrayList<TreeNode>();
   return elderList;
}


public List<TreeNode> getJuniors()
{
   //havn't finish!
   List<TreeNode> juniorList = new ArrayList<TreeNode>();
   return juniorList;
}


public List<TreeNode> getChildList()
{
   return childList;
}


public void deleteNode()
{
   TreeNode parentNode = this.getParentNode();
   int id = this.getSelfId();

   if (parentNode != null) {
    parentNode.deleteChildNode(id);
   }
}


public void deleteChildNode(int childId)
{
   List<TreeNode> childList = this.getChildList();
   int childNumber = childList.size();
   for (int i = 0; i < childNumber; i++) {
    TreeNode child = childList.get(i);
    if (child.getSelfId() == childId) {
     childList.remove(i);
     return;
    }
   }
}


public boolean insertJuniorNode(TreeNode treeNode)
{
   int juniorParentId = treeNode.getParentId();
   if (this.parentId == juniorParentId) {
    addChildNode(treeNode);
    return true;
   } else {
//    List<TreeNode> childList = this.getChildList();
//    int childNumber = childList.size();
//    boolean insertFlag;
//
//    for (int i = 0; i < childNumber; i++) {
//     TreeNode childNode = childList.get(i);
//     insertFlag = childNode.insertJuniorNode(treeNode);
//     if (insertFlag == true)
//      return true;
//    }
//    return false;
    TreeNode findnode=this.findTreeNodeById(juniorParentId);
    if(findnode!=null)
    {
     findnode.getChildList().add(treeNode);
     return true;
    }
    return false;
   }
}


public TreeNode findTreeNodeById(int id)
{
   if (this.selfId == id)
    return this;
   if (childList.isEmpty() || childList == null) {
    return null;
   } else {
    int childNumber = childList.size();
    for (int i = 0; i < childNumber; i++) {
     TreeNode child = childList.get(i);
     TreeNode resultNode = child.findTreeNodeById(id);
     if (resultNode != null) {
      return resultNode;
     }
    }
    return null;
   }
}


public void traverse()
{
   if (selfId < 0)
    return;
   print(this.selfId);
   if (childList == null || childList.isEmpty())
    return;
   int childNumber = childList.size();
   for (int i = 0; i < childNumber; i++)
   {
    TreeNode child = childList.get(i);
    child.traverse();
   }
}

public void print(String content)
{
   System.out.println(content);
}

public void print(int content)
{
   System.out.println(String.valueOf(content));
}

public void setChildList(List<TreeNode> childList)
{
   this.childList = childList;
}

public int getParentId()
{
   return parentId;
}

public void setParentId(int parentId)
{
   this.parentId = parentId;
}

public int getSelfId()
{
   return selfId;
}

public void setSelfId(int selfId)
{
   this.selfId = selfId;
}

public TreeNode getParentNode()
{
   return parentNode;
}

public void setParentNode(TreeNode parentNode)
{
   this.parentNode = parentNode;
}

public String getNodeName()
{
   return nodeName;
}

public void setNodeName(String nodeName)
{
   this.nodeName = nodeName;
}
}
/////////////////////////////////////////////////////////////////

package pattern;

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

public class TreeHelper implements java.io.Serializable
{
private TreeNode root;
private List<TreeNode> tempNodeList;

public TreeHelper()
{
}

public TreeHelper(List<TreeNode> treeNodeList)
{
   tempNodeList = treeNodeList;
   generateTree();
}


public void generateTree()
{
   HashMap nodeMap = putNodesIntoMap();
   putChildIntoParent(nodeMap);
}


protected HashMap putNodesIntoMap()
{
   HashMap nodeMap = new HashMap<String, TreeNode>();
   Iterator it = tempNodeList.iterator();
   while (it.hasNext())
   {
    TreeNode treeNode = (TreeNode) it.next();
    int id = treeNode.getSelfId();
    String keyId = String.valueOf(id);
    nodeMap.put(keyId, treeNode);
   }
   return nodeMap;
}


protected void putChildIntoParent(HashMap nodeMap)
{
   Iterator it = nodeMap.values().iterator();
   while (it.hasNext())
   {
    TreeNode treeNode = (TreeNode) it.next();
    int parentId = treeNode.getParentId();
    if(parentId==0)
    {
     this.setRoot(treeNode);
    }
    else if(parentId!=treeNode.getSelfId())
    {
     String parentKeyId = String.valueOf(parentId);
     if (nodeMap.containsKey(parentKeyId))
     {
      TreeNode parentNode = (TreeNode) nodeMap.get(parentKeyId);
      if (parentNode == null) {
       return;
      }
      else
      {
       parentNode.addChildNode(treeNode);
       System.out.println("childId: " +treeNode.getSelfId()+" "+
         "parentId: "+parentNode.getSelfId());
      }
     }
    }
   }
}


protected void initTempNodeList()
{
   if (this.tempNodeList == null)
   {
    this.tempNodeList = new ArrayList<TreeNode>();
   }
}


public void addTreeNode(TreeNode treeNode)
{
   initTempNodeList();
   this.tempNodeList.add(treeNode);
}


public boolean insertTreeNode(TreeNode treeNode)
{
   boolean insertFlag = root.insertJuniorNode(treeNode);
   return insertFlag;
}

public TreeNode getRoot()
{
   return root;
}

public void setRoot(TreeNode root)
{
   this.root = root;
}

public List<TreeNode> getTempNodeList()
{
   return tempNodeList;
}

public void setTempNodeList(List<TreeNode> tempNodeList)
{
   this.tempNodeList = tempNodeList;
}

public static void main(String[] args)
{
  
}

}

 

分享到:
评论

相关推荐

    java动态树形菜单与分页

    在Java开发中,动态树形菜单和分页是常见的需求,尤其在构建Web应用程序时,它们对于用户界面的交互性和数据管理的效率至关重要。本文将深入探讨这两个概念以及如何在Java环境中实现它们。 首先,我们来看动态树形...

    基于JAVA建立树形结构的算法优化.pdf

    从普通Java对象中建立树形结构的过程涉及到算法设计与优化。原始数据通常是扁平化存储的,需要通过特定的算法将其转换为具有层次结构的树形数据。在教师信息系统的基本信息模块中,地址信息的管理是构建树形结构的一...

    Java实现二叉排序树

    在Java中实现二叉排序树,我们通常会定义一个`Node`类来表示树的节点,它包含键、值以及左右子节点的引用。例如: ```java class Node { int key; Object value; Node left, right; public Node(int item) { ...

    java 标准树结构

    Java标准树结构是一种在编程中广泛使用的数据结构,它基于节点的概念,每个节点可以有零个、一个或多个子节点,形成层次化的组织。在Java中,标准树结构通常指的是`java.util.TreeSet`和`java.util.TreeMap`类,它们...

    java kd树实现

    Java实现的KD树是一种在高维空间中进行高效查询的数据结构。KD树(K-Dimensional Tree)是二叉树的一种变体,特别适用于处理多维数据。它的名称来源于“K Dimensional”,其中“K”代表数据的维度数。在机器学习、...

    Java目录树控件

    在Java编程语言中,构建一个目录树控件是常见的需求,尤其在开发文件管理系统或桌面应用程序时。这个控件能够直观地展示文件系统的层级结构,使用户能够方便地浏览和操作文件和文件夹。以下是对如何实现Java目录树...

    JAVA B+树的实现

    本文将深入探讨如何在Java环境中实现B+树,包括其基本概念、特性以及如何用Java代码来构建和操作B+树。 首先,B+树是一种自平衡的多路搜索树,它的主要特点是所有叶子节点都在同一层,并且每个非叶子节点只存储键值...

    java解析xml动态生成树形菜单结构

    总结起来,实现“java解析xml动态生成树形菜单结构”的项目,需要掌握以下核心知识点: 1. Java的DOM解析XML,构建树形数据结构。 2. 设计和实现无限层级的树形菜单数据模型。 3. 使用`JSTree`库在前端渲染树形菜单...

    java 哈夫曼树及哈夫曼树的应用

    在Java中实现哈夫曼树,我们可以分为以下几个步骤: 1. **哈夫曼编码**:哈夫曼编码是哈夫曼树的基础,它是为每个字符分配一个唯一的二进制码,使得字符出现频率越高,其编码越短。哈夫曼编码的过程是通过构造...

    红黑树的Java实现参考源码

    红黑树(Red-Black Tree)是一种自平衡的二叉查找树,它的设计目标是保持树的平衡,从而在插入、删除和查找操作时都能保持较高的效率。在Java中,红黑树主要体现在`java.util.TreeMap`和`java.util.TreeSet`这两个类...

    java基础数据结构-树

    树是一种非线性数据结构,相较于线性表、栈、队列等线性结构,树提供了更复杂且丰富的组织方式。在树中,数据元素(节点)通过分支相互连接,形成了一个层次化的结构。树由一个或多个节点组成,其中只有一个根节点,...

    java 实现二叉排序树 堆

    在Java中实现二叉排序树,我们需要定义一个Node类来表示树的节点,包含键值、左子节点和右子节点。然后创建一个BST类,包含插入、查找和删除等基本操作。以下是一个简单的Java实现: ```java public class Node { ...

    java树形菜单(主要用于菜单的制作)

    Java树形菜单是一种在Web应用中常用于展示层次结构数据的交互式组件。dhtmlxTree是其中一种流行的JavaScript库,它可以与Java后端服务配合,用于构建动态、可操作的树状视图。本教程将详细介绍如何使用dhtmlxTree来...

    Java学习笔记4-圣诞树

    4. **递归**:如果树的每一层都是由较小的相同形状构成,那么递归函数可能被用来简化代码并创建多级分支。 5. **字符串操作**:可能涉及到字符串的连接来创建带有空格或星号的行,形成树的形状。 6. **变量**:使用...

    java实现二叉排序树

    这种特性使得二叉排序树在插入、删除和查找操作上有较高的效率。 在Java中实现二叉排序树,我们通常会创建一个名为`BinarySearchTree`或`BSTNode`的类来表示树的结构。以下是一个简单的`BSTNode`类的实现: ```...

    二叉查找树java

    这个特性使得二叉查找树在查找、插入和删除操作时具有较高的效率。 在Java中,我们可以用类来表示二叉查找树的节点。一个简单的节点类可以这样定义: ```java public class TreeNode { int val; TreeNode left; ...

    一个java实现的R树

    通过这种方式,R树能够以相对较低的计算复杂度进行近似最近邻搜索、范围查询等操作。 `RTree.java` 是R树的主要实现类,它可能包含构建、插入、删除和查询等基本操作。`AbstractNode.java` 作为抽象节点类,可能是...

    哈夫曼树和哈夫曼编码的Java实现

    哈夫曼树是一种特殊的二叉树,也称为最优二叉树或最小带权路径长度树,它的构造原则是:频率较高的字符其在树中的路径较短,从而实现数据的高效存储。哈夫曼编码则是利用哈夫曼树进行编码,使得高频字符用较短的二...

    红黑树、二叉平衡树、二叉排序树的java实现

    本项目涵盖了三种重要的树形数据结构的Java实现:红黑树(RBTree)、二叉平衡树(AVLTree)以及二叉排序树(BSTree)。这些数据结构在处理大量数据时,能够提供高效的插入、删除和查找操作,广泛应用于数据库索引、...

    java 数据结构 哈夫曼树

    在Java语言中,实现哈夫曼树可以帮助我们理解和掌握数据结构与算法的核心概念。 哈夫曼树的基本思想是基于贪心策略,通过构建最小带权路径长度(Minimum Weighted Path Length, MWPL)的二叉树来达到数据编码的最...

Global site tag (gtag.js) - Google Analytics