我需要帮助理解这项家庭作业。我需要构建一个二元决策树,找到所有可能的“工作轮班”。基本上,您输入作业S和表示班次长度的数字数组。任务是找到等于S的所有可能的组合组合。
示例:
list of shifts: 43 12 54 3 8 18 3 2 9 15
S = 23
some possible combinations: 12, 3, 8 and 18, 3, 2
我对如何实现这一点很困惑。他提到“对一个左孩子的遍历意味着选择一个工作到一个班次,在这个班次中,一个正确的孩子的遍历意味着没有选择给定的工作到班次”
我不需要代码,虽然显然它会有所帮助:) 附:他似乎指出不使用二叉搜索树
答案 0 :(得分:1)
我假设轮班按照给定的顺序到达,因为它们在列表中。
让我们说我们处于榜单的第一位。让我们创建一个节点,这也将作为树的根。该节点是当前节点。第一个数字43被放入当前节点。现在,我们可以选择是否接受。由于43大于23,我们不接受它。这意味着我们从包含43的节点向左下方分支。现在树是:
43
然后我们得到12.所以我们的树看起来像这样(侧向箭头表示正确的孩子或换班,向下表示留下孩子或不带走)。 :
43
|
12
如果我们接受它,那么我们必须走下正确的分支。下一个数字是54,让我们把它放在当前节点中:
43
|
12 - 54
我们不能拿54,它太大了。所以我们走左边的分支。下一个数字是3,将其放在当前节点中:
43
|
12 - 54
|
3
取这个数字3。那么下一个数字是8.这给了我们23.让我们把一个标记值,x符号放在这里。这将表示我们已达到23.树现在看起来像这样:
43
|
12 - 54
|
3 - 8 - x
现在,我们追溯到8.如果我们没有接受它怎么办?然后我们将沿着左侧分支找到18.树将看起来像:
43
|
12 - 54
|
3 - 8 - x
|
18
我们不会拿18,因为它太大了。接下来是3,2 ...我们继续以这种方式构建树:
43
|
12 - 54
|
3 - 8 - x
|
18
|
3 - 2 - 9
|
15
|
o
我们在左边的15岁儿童身上放了另一个哨兵值o,表示由于输入已经用尽,我们不能再往前走了。我们现在可以追溯到2,然后考虑不取2,然后从列表中再次收到9。但这也无法让我们得到23的总和:
43
|
12 - 54
|
3 - 8 - x
|
18
|
3 - 2 - 9
| |
9 15
| |
15 o
|
o
它继续:
43
|
12 - 54
|
3 - 8 - x
|
18
|
3 --- 2 - 9
| | |
2-9 9 15
| |
15 o
|
o
Anywyas,最终我们将有一棵树,其中一些叶子节点将包含x表示成功。您在该节点的路径上右转的数字为您提供了总和23.