java - 遍历树收集节点组合
问题描述
摘要:我有一棵树,其中包含汽车零件,我需要从中构建这些零件的所有有效组合。
可能需要零件 - 每个构建都必须包含它们。
零件可以是可选的。
零件可能与其他零件发生冲突。
零件内部可以有可选零件。
示例树:
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
我应该朝着什么方向去解决这个任务?
这应该是一项相对容易的任务,但我什至在努力从哪里开始。
解决方案
鉴于您要问如何开始,这里有一个建议:
- 从一个接口开始,该接口代表您可能需要查询的有关节点的任何内容
- 编写该接口的最简单实现(例如,您的“蓝色”叶节点)。包括单元测试以确保它符合您的要求。
- 继续遍历其余节点,直到它们都按照您的预期进行。
- 现在编写一个全新的类,它只使用接口方法生成所有变体。
推荐阅读
- javascript - 多文件上传中的 OnSubmit 和 OnChange
- python - 如何在 django 中使斜杠可选
- excel - 我需要检查文件(test.xls)是否打开
- generics - 在 Kotlin 文档泛型示例中没有返回的 compareTo
- qt - 链接器正在寻找带有 lib 前缀的库,尽管在 QtCreator / qmake 中没有使用 -l 标志
- java - Selenium HtmlUnitDriver 中的未知主机
- javascript - 如何在 Api 调用上使用引导程序创建 3 X 3(Col X Row)的画廊
- java - 如何计算在字符串中找到多少个 2 个字符的匹配项?
- python-3.x - 使用scrapy从网页的相应链接中提取文章
- python - 在 Python 中创建两个给定长度的数组