Java tree data

Is there a good available (standard Java) data structure to represent a tree in Java?

Specifically I need to represent the following:

  • The tree at any node can have an arbitrary number of children
  • Each node (after the root) is just a String (whose children are also Strings)
  • I need to be able to get all the children (some sort of list or array of Strings) given an input string representing a given node
  • Is there an available structure for this or do I need to create my own (if so implementation suggestions would be great).


    Here:

    public class Tree<T> {
        private Node<T> root;
    
        public Tree(T rootData) {
            root = new Node<T>();
            root.data = rootData;
            root.children = new ArrayList<Node<T>>();
        }
    
        public static class Node<T> {
            private T data;
            private Node<T> parent;
            private List<Node<T>> children;
        }
    }
    

    That is a basic tree structure that can be used for String or any other object. It is fairly easy to implement simple trees to do what you need.

    All you need to add are methods for add to, removing from, traversing, and constructors. The Node is the basic building block of the Tree .


    Yet another tree structure:

    public class TreeNode<T> implements Iterable<TreeNode<T>> {
    
        T data;
        TreeNode<T> parent;
        List<TreeNode<T>> children;
    
        public TreeNode(T data) {
            this.data = data;
            this.children = new LinkedList<TreeNode<T>>();
        }
    
        public TreeNode<T> addChild(T child) {
            TreeNode<T> childNode = new TreeNode<T>(child);
            childNode.parent = this;
            this.children.add(childNode);
            return childNode;
        }
    
        // other features ...
    
    }
    

    Sample usage:

    TreeNode<String> root = new TreeNode<String>("root");
    {
        TreeNode<String> node0 = root.addChild("node0");
        TreeNode<String> node1 = root.addChild("node1");
        TreeNode<String> node2 = root.addChild("node2");
        {
            TreeNode<String> node20 = node2.addChild(null);
            TreeNode<String> node21 = node2.addChild("node21");
            {
                TreeNode<String> node210 = node20.addChild("node210");
            }
        }
    }
    

    BONUS
    See fully-fledged tree with:

  • iterator
  • searching
  • Java/C#
  • https://github.com/gt4dev/yet-another-tree-structure


    There is actually a pretty good tree structure implemented in the JDK.

    Have a look at javax.swing.tree, TreeModel, and TreeNode. They are designed to be used with the JTreePanel but they are, in fact, a pretty good tree implementation and there is nothing stopping you from using it with out a swing interface.

    Note that as of Java 9 you may wish not to use these classes as they will not be present in the 'Compact profiles'.

    链接地址: http://www.djcxy.com/p/6786.html

    上一篇: 什么是概率数据结构?

    下一篇: Java树数据