【问题标题】:Specific tree data structure in javajava中具体的树数据结构
【发布时间】:2013-08-08 23:04:31
【问题描述】:

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

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

所以我创建了两个类:BoardNode

  • 每个BoardArrayListNodes 组成:

    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


【解决方案1】:

回答你的问题:

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

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

【讨论】:

  • 感谢您的及时帮助!实际上,要构建树,这些Nodes 将来自另一个类的ArrayList source。如果我在树上更改其内容(例如:NodeString mLabel),它是否也会影响原始节点? (来自ArrayList source的那个)
  • 而且折叠结构确实看起来更干净,即使Boardclass 在我的原始代码中有其他属性(我在发布之前尝试使其更简单)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 2014-06-16
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多