java - 遍历树收集节点组合

标签 java algorithm tree

总结:我有一棵包含汽车零件的树,我需要从中构建这些零件的所有有效组合。

零件可能是必需的 - 每个构建都必须包含它们。

部分可以是可选的。

部分可能与其他部分冲突。

部件内部可以有可选部件。

示例树:

Car
| - Motor (required)
| - - V8
| - - V12
| - - - Colour (optional)
| - - - - Black
| - - - - Chrome
| - Transmission (required)
| - - Mechanical
| - - Automatic
| - Wheels (optional)
| - - Basic
| - - Fancy
| - - - Colour (optional)
| - - - - Red
| - - - - Blue
| - BodyStyle (optional)
| - - Hatchback (conflicts with Motor.V12)
| - - Buggy (conflicts with Motor.V8)

这棵树的有效构建:

Car | Motor.V8 | Transmission.Automatic
Car | Motor.V8 | Transmission.Automatic | Wheels.Basic
Car | Motor.V12.Colour.Black | Transmission.Automatic | Wheels.Basic
Car | Motor.V8 | Transmission.Automatic | BodyStyle.Hatchback
Car | Motor.V12 | Transmission.Mechanical | Wheels.Fancy | BodyStyle.Buggy
Car | Motor.V12 | Transmission.Mechanical | Wheels.Fancy.Colour.Red | BodyStyle.Buggy

我应该朝着什么方向去解决这个任务?

这应该是一项相对容易的任务,但我什至不知道从哪里开始。

最佳答案

鉴于您询问如何开始,这里有一个建议:

  1. 从一个接口(interface)开始,该接口(interface)表示您可能需要查询的有关节点的任何内容
  2. 编写该接口(interface)的最简单实现(例如,您的“蓝色”叶节点)。包括单元测试以确保它能满足您的要求。
  3. 继续遍历其余节点,直到它们都按照您的预期进行。
  4. 现在编写一个全新的类来生成所有变体,仅使用接口(interface)方法。

关于java - 遍历树收集节点组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57949875/

相关文章:

java - 在 Java 服务器中发送 edittext 时出错。查看代码

algorithm - 是否有容忍微小差异的哈希算法?

algorithm - 使用距离度量制作完全连接的图

clojure - 我如何格式化一棵树以使其与 Clojure 的 zipper 一起使用?

java - 以编程方式 (Java) 检索最后一个 Git 标签,用于在软件中放置版本信息

java - Android Studio Ble Gatt 连接将数据写入自定义服务特征

algorithm - 聚类一组矩形

java - Java中递归生成树

Scala:解决 "illegal cyclic reference"

java - Google Foobar 挑战 3 - 找到访问代码