【问题标题】:Java structure for mathematical tree with int nodes具有 int 节点的数学树的 Java 结构
【发布时间】:2012-08-22 21:10:51
【问题描述】:

在 Java 中,Tree 是表示具有此类属性的树的最佳结构:

  • 所有节点都是唯一的 ints;
  • 树的深度由int d > 0 给出
  • 一个节点可以有多少个子节点没有限制

我需要做的操作:

  • 遍历子节点仅位于第一层以下任何节点
  • 添加节点
  • 删除一个子树,即一个节点,其所有子节点一直向下
  • 提取子树,即在单独的树中定位和复制(克隆)

我不需要的操作:

  • 编辑节点

属性非常适合Tree,因此在性能方面可能有一些超级实现可用。 XMLTree 或其他。

目前我正在使用数组数组来存储元素,但我发现它并不微妙。

【问题讨论】:

  • 关于插入/删除/搜索操作的任何限制?重复条目怎么办?
  • 我可能会创建一个类来表示一个节点。该类将有一个带有值的 int 字段和子节点的ArrayList。有一些图形库可以为您执行此操作,但除非您需要担心性能或多线程,否则您自己的库可能是最快的。
  • 我会不断地插入/删除/搜索。实际上,没有什么可搜索的,我通过它们的唯一表示预先知道节点,然后将它们连同它的子节点一起从树中获取。没有重复。
  • 我担心性能问题。
  • 这可能仍然是最简单的方法。

标签: java tree


【解决方案1】:

这是一个Node 类的基本示例,可用于形成您的树形结构。编写以深度优先或广度优先方式遍历所有子节点的方法有一些复杂性。

作为替代方案,您可以考虑使用免费提供这些方法的DefaultMutableTreeNodedepthFirstEnumeration()breadthFirstEnumeration())。此节点实现还允许您通过调用setUserObject(Object) 来附加用户对象。缺点是实现可能不如编写自己的结构那么紧凑,因此它实际上取决于树的大小。

public class Node {
  private final int value;
  private final List<Node> children;

  public Node(int value) {
    this.value = value;
    this.children = new LinkedList<Node>();
  }

  public int getValue() {
    return value;
  }

  public List<? extends Node> getChildren() {
    return Collections.unmodifiableList(children);
  }

  public void addChild(Node child) { 
    children.add(child);
  }
}

【讨论】:

  • 忘了提了,现在编辑了关于迭代的内容——只有在树下一层的孩子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多