如何在Java中实现树数据结构?

2022-08-31 04:19:49

是否有任何标准的 Java 库类来表示 Java 中的树?

具体来说,我需要表示以下内容:

  • 任何节点的子树都可以有任意数量的子项
  • 每个节点(在根之后)及其子节点将具有字符串值
  • 我需要获取给定节点的所有子节点(某种字符串列表或数组)及其字符串值(即,将节点作为输入并返回子节点的所有字符串值作为输出的方法)

是否有任何可用的结构,或者我是否需要创建自己的结构(如果是这样,实现建议会很棒)。


答案 1

这里:

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;
    }
}

这是一个基本的树结构,可用于或任何其他对象。实现简单的树来做你需要的事情是相当容易的。String

您需要添加的只是用于添加到、删除、遍历和构造函数的方法。是 的基本构建块。NodeTree


答案 2

另一种树结构:

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 ...

}

示例用法:

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");
        }
    }
}

奖金
看到成熟的树与:

  • 迭 代
  • 搜索
  • Java/C#

https://github.com/gt4dev/yet-another-tree-structure


推荐