2013-08-08 4 views
3

Я пытаюсь реализовать определенную структуру данных дерева в Java; Я точно не знаю, что это за дерево. Вот пример того, что я пытаюсь сделать:Конкретная структура данных дерева в java

   ----------------------------- 
      | Board      | 
      | 
      | Node1 Node2 Node3 Node4 | 
      | _  _  _  _ 
      | |_| |_| |_| |_| | 
      ---+------+------+------+---- 
       |  |  |  | 
      /  |  |  \ 
--------------  --- ---  ----------- 
| Board  |  -  -  | Board  | 
|         |   
| Node1 Node2 |     | Node1 ... | 
| _  _      | _  
| |_| |_| |     | |_| ... | 
---+------+---      ---+------+ 
/  |       | 
    .  .       . 
    .  .       . 
    .  .       . 

Так что я создал два класса: Board и Node.

  • Каждый Board состоит из ArrayList из Nodes:

    public class Board { 
        ArrayList<Node> mContent; 
    
        Board() { 
         mContent = new ArrayList<Node>(); 
        } 
    
        Board(Board pBoard) { 
         mContent = new ArrayList<Node>(pBoard.mContent); 
        } 
    
        void add(Node pNode) { 
         mContent.add(pNode); 
        } 
    
        void add(String pString, Board pBoard) { 
         Node tNode = new Node(pString, pBoard); 
         mContent.add(tNode); 
        } 
    } 
    
  • Каждый Node состоит из String и ссылки на другую Board:

    public class Node { 
        String mLabel; 
        Board mBoard; 
    
        Node(){ 
         mLabel = new String(); 
         mBoard = null; 
        } 
    
        Node(String pLabel, Board pBoard){ 
         mLabel = new String(pLabel); 
         mBoard = new Board(Board); 
        } 
    
        void setBoard(Board pBoard){ 
         mBoard = pBoard; 
        } 
    } 
    

Мои вопросы :

  • О методе add(Node pNode), мне нужно, чтобы создать новую Node, а затем добавить его в ArrayList?

  • О методе setBoard(...), мне нужно, чтобы создать новую Board, а затем передать его в mBoard, или просто делать mBoard = pBoard правильно?

  • Как указать лист Node? Я пытался инициализировать его с null, но я получил NullPointerException

Спасибо!

+1

Поскольку ваши отношения родитель-потомок находятся на узловых платах, вы должны реализовать указатель от узла к объектам платы. структура оборвана без этого. – Roam

+0

@Roam, я не уверен, что моя реализация верна, но не будет ли это 'Board mBoard' из класса' Node' работать как указатель на объект 'Board'? – horta

+1

Цель «Board» здесь немного запутанна. Обычно узлы в дереве представлены классом под названием «Node», который содержит ссылку на данные, которые необходимо сохранить, и ссылки на его дочерние элементы и родителя. То есть Рассмотрим объединение 'Board' в' Node'. –

ответ

4

Чтобы ответить на ваш вопрос:

  • Node передается как pNode следует использовать; вам не нужно создавать новую.
  • Должно использоваться Board, прошедшее как pBoard; вам не нужно создавать новую.
  • Узел листа имеет нуль mBoard. В качестве альтернативы он может иметь mBoard, который имеет пустой массив mContent. Выбор зависит от информации, которую вы не размещали о том, как вы хотите, чтобы ваши деревья были снизу.

Возможно, вы столкнетесь с разрушением своей структуры. Непонятно, почему у вас не просто один класс Node (с полем ArrayList<Node> mContent вместо поля mBoard).

+0

Благодарим вас за помощь! На самом деле, чтобы построить дерево, эти «Узлы» будут поступать из источника ArrayList из другого класса. Если я изменил его содержимое на Дереве (например: 'String mLabel'' Node'), это повлияет и на исходный узел? (один из источника ArrayList) – horta

+0

И разрушение структуры действительно кажется намного более чистым, хотя класс 'Board' имеет другие атрибуты в моем исходном коде (я попытался сделать это проще перед публикацией здесь). – horta

Смежные вопросы