【发布时间】:2013-08-08 23:04:31
【问题描述】:
我正在尝试在 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
谢谢!
【问题讨论】:
-
因为你的父子关系在节点板上,你应该实现一个从节点到板对象的指针。没有那个结构就悬空了。
-
@Roam,我不确定我的实现是否正确,但
Node类中的Board mBoard不能用作指向Board对象的指针吗? -
Board这里的用途有点混乱。通常,树中的节点由名为Node的类表示,该类包含对需要保存的数据的引用以及对其子项和父项的引用。 IE。考虑将Board合并到Node。 -
@increment1 - 我应该如何保留对父
Board的引用?通过将父级作为构造函数的参数传递? -
是的,通常是这样完成的。如果节点可以移动,那么你也需要一个 setter / getter。
标签: java data-structures arraylist pass-by-reference