【问题标题】:Adding multiple children in a tree using java使用java在树中添加多个孩子
【发布时间】:2019-08-25 11:27:19
【问题描述】:

我需要创建一个层次结构,该结构将有多个孩子,这些孩子还可以有多个孩子。所以,我使用树来实现它,但我坚持它的实现。

我需要从数据中构建的结构是这样的:

class Node<T>
{
private T id;
private T description;
private T name;
private List<Node> children = new ArrayList<Node>();
private Node parent=null;

// then set and get methods

}

孩子可以生孩子

{  
   "ORGANIZATION":[  
      {  
         "   id":101,
         "category_name":"Organization 1",
         "description":" ",
         "WING ":[  
            //this is the category children which can also be a subcategory            {  
               "id":122,
               "category_name":"wing 1",
               "description":"",
               "FLOOR":[  
                  {  
                     "id":111,
                     "category_name":"floor 1"
                  }
               ]
            },
            {  
               "id":555,
               "category_name":"wing 2",
               "description":""
            },
            {  
               "id":222,
               "category_name":"wing 3",
               "description":""
            }
         ]
      },
      {  
         "id":11111,
         "category_name":"organization 2",
         "description":"",
         "WING":[  
            {  
               "id":4545,
               "category_name":"wing 1",
               "description":""
            },
            {  
               "id":252,
               "category_name":"wing 2",
               "description":"",
               "FLOOR":[  
                  {  
                     "id":131,
                     "category_name":"floor 1",
                     "description":""
                  }
               ]
            },
            {  
               "id":2526,
               "category_name":"Wing 3 ",
               "description":"",
               "FLOOR":[  
                  {  
                     "id":87,
                     "category_name":"floor 2",
                     "description":""
                  },
                  {  
                     "id":565,
                     "category_name":"floor 3",
                     "description":"",
                     "ROOM":[  
                        // here is an example of a child that is a sub-category also                        {  
                           "id":555,
                           "category_name":"room 1",
                           "description":""
                        },
                        {  
                           "id":584,
                           "category_name":"room 2",
                           "description":""
                        },
                        {  
                           "id":77,
                           "category_name":"room 3",
                           "description":""
                        }
                     ]
                  }
               ]
            }
         ]
      }
   ]
}

我被 Node 类卡住了,我不知道如何实现它。那么,是否有任何实现来形成这种结构?以及我可以在我的类节点中添加哪些其他功能。 帮帮我吧。

【问题讨论】:

    标签: java data-structures tree


    【解决方案1】:

    看看你的解决方案,你一点也不远。首先观察到iddescriptionname 都是不同的数据类型。我不会尝试在这里使用泛型,因为我认为它们是一种浪费。特别是,您知道id 将是Integerdescription 将是Stringname 将是String。在这个意义上使用类型 T 只会让您感到困惑,因为您的问题不适合 Java generics 的用例(基于已呈现的内容)。

    标准Java Bean methods 之外的方法可能是addChild(Node child)isLeaf()

    addChild(Node child)

    此函数将接收一个节点并将其添加到children。此函数的目的是简化将节点添加到 children 列表的过程,并确保您不必在类外部使用列表。

    isLeaf()

    此函数将获取特定节点并确定它是否为树的叶子(即,它将返回一个Boolean 值)。如果您打算在这棵树上操作以执行各种算法,如果您可以调用node.isLeaf() 代替node.getChildren().size() == 0,您的代码将变得更加简单。我发现这是在我的代码中很好地使用封装。

    考虑构建器模式

    根据我的经验,就代码可读性而言,我发现builder pattern 非常有用。无论您是否选择在这里实现它,这都是您将来可能会遇到的事情。

    【讨论】:

    • 是的,我已经创建了那个类,但我不知道如何使用这些方法来生成我从平面数据共享的这种结构。我从我的实体(表)中获取。我无法使用 Node 类对这种格式的数据进行建模。你能帮帮我吗?
    • 你需要确定你的分区是什么。最终,从平面列表移动到树将表明数据本身存在某种递归关系。是什么证明表中的一行是另一行的子行?一旦你找到了这一点,构建一个层次结构就更简单了。
    • 我找到了 parentId 的分区,但是我尝试通过使用迭代来制作该树结构,但这对我没有帮助。所以这里将使用递归。但是在添加 2 个节点后,我坚持调用相同的方法来添加更多节点。
    • 递归绝对是要走的路,特别是如果你事先不知道你的深度限制是多少。一些利用这种类型的业务应用程序(例如,从平面产品列表移动到层次结构)已经预先确定了这一点。此外,您的分区通常是某种属性,表明需要建立父/子关系。这在很大程度上取决于您的要求。
    • 在编写递归算法时,确定你的基本情况是什么,然后确定你的递归情况是什么。这就是为什么在数据位于平面列表中时确定您的分区元素很重要的原因。根据该分区元素,您应该能够确定叶子是什么。
    猜你喜欢
    • 1970-01-01
    • 2023-01-19
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多