3

我正在尝试在 Java 中实现特定的树数据结构;我不知道这是什么类型的树。这是我正在尝试做的一个例子:

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

所以我创建了两个类:BoardNode.

  • 每个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

谢谢!

4

1 回答 1

4

要回答您的问题:

  • 应该使用传递Node的 as ;pNode你不需要创建一个新的。
  • 应该使用传递Board的 as ;pBoard你不需要创建一个新的。
  • 叶节点有一个 null mBoard。或者,它可以有mBoard一个空mContent数组。选择取决于您尚未发布的有关您希望树木如何触底的信息。

您可能会考虑折叠您的结构。不清楚为什么你不只有一个Node类(用一个ArrayList<Node> mContent字段代替 mBoard 字段)。

于 2013-08-08T23:09:55.793 回答