java中的特定树数据结构

时间:2013-08-08 23:04:31

标签: java data-structures arraylist pass-by-reference

我正在尝试用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是否正确?< / p>

  • 如何指出一片叶Node?我尝试使用null对其进行初始化,但我得到了NullPointerException

谢谢!

1 个答案:

答案 0 :(得分:4)

回答你的问题:

  • 应使用Node作为pNode传递;你不需要创建一个新的。
  • 应使用Board作为pBoard传递;你不需要创建一个新的。
  • 叶节点的空mBoard。或者,它可能有一个mBoard,其中包含一个空的mContent数组。选择取决于您未发布的关于树木如何降低的信息。

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