Построение древовидной структуры - PullRequest
0 голосов
/ 03 августа 2009

Я только что опубликовал следующий вопрос, но допустил ошибку. Я хочу не то, как использовать Eclipse, а как построить древовидную структуру. Элемент может иметь более одного дочернего элемента. Так покажи мне, как построить дерево; На самом деле это не дерево, а построение структуры, как показано ниже. Спасибо

У меня проблема с приложением, и мне нужна помощь. У меня есть данные с сервера в этой форме

Фруктовое яблоко и др.

Стол Стул-ручка School et ..

...

Еда, манго, дыня и др.

Читая слева, я хочу сделать, например; в первом ряду

Пища родитель Apple

Яблоко-родитель фрукта

Плод родительского семени

и если данных больше, то и т. Д. Я переберу вышеуказанные данные с сервера с помощью цикла; Пример :::

+Food
    Apple
       Fruit
           Seed
            etc..

+Table
      Chair
          Pen
             School
              etc..

В приведенном выше коде «Еда» и «Таблица» относятся к одному и тому же уровню. Моя проблема в том, как мне начать. Я весь день гуглил, но не могу найти то, что действительно понимаю. Как я могу, например, сделать «Пищу» родителем и сделать Apple своим ребенком, а затем сделать «Фрукт» ребенком яблока и так далее. Покажите мне, как построить дерево.

Нужна ваша помощь.

Спасибо

Ответы [ 3 ]

1 голос
/ 03 августа 2009

Вы можете попробовать использовать класс javax.swing.tree.DefaultMutableTreeNode. Пока он находится в свинг-пакете, он не содержит никакого графического кода.

1 голос
/ 03 августа 2009

Вот простая реализация, в которой каждый узел имеет удобочитаемое имя String и ссылается на ноль или более дочерних узлов.

public interface Node {
  String getName();

  void addChild(Node node);

  List<? extends Node> getChildren();
}

public class NodeImpl implements Node {
  private final String name;
  private final List<Node> nodes;

  public NodeImpl(String name) {
    this.name = name;
    this.nodes = new LinkedList<Node>();
  }

  public String getName() {
    return name;
  }

  public void addChild(Node node) {
    nodes.add(node);
  }

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

Пример использования:

Node root = new Node("Root"); // Create root node.
Node food = new Node("Food"); // Create level 1 child nodes.
Node table = new Node("Table");

root.addChild(foo); // Add level 1 child nodes to root.
root.addChild(table);

Node apple = new Node("Apple"); // Create and add other child nodes.
food.addChild(apple); // etc.
0 голосов
/ 03 августа 2009

Создайте класс с именем Node и сделайте, чтобы Node имел ArrayList узлов и переменную, содержащую родительский узел. Как таковой:

class Node {

private List<Node> children; 
private Node parent;

public Node() {
    children = new ArrayList<Node>(); 
}
//Constructors, accessors, mutators, etc.

}

Это самый простой способ. Вы можете сделать нод абстрактным классом, затем иметь стул, стол, школу и т. Д., Все это расширяет узел.

public class School extends Node {

    public School() {
        super();
    }

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

    public void setParent(Node node) {
        parent = node;
    }
}

Редактировать: Я добавил несколько примеров методов, чтобы показать вам, что должно произойти, чтобы добавить потомков или установить родителя. В каком-то другом классе вы можете создавать свои объекты School, Desk и т. Д., А затем создавать методы addChild и setParent, чтобы добавлять дочерние элементы в узел или устанавливать родительский узел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...