[BASE]
/ \ \
C1 C2 C3
/\ \
C4 C5 C6
我有一棵像上面这样的树。这是一个不平衡的N子树。问题是,我需要根据某些条件选择其中一个节点。像
Select C1 when k1 = a
Select C4 when K1 = a and K2=b and K3=C
Select C5 when k1 = a and k'=z
Select C2 when K'' = b
Select C3 when k5 = 9
Select C6 when k5=9 and k6 = 10
程序的输入将是一个任意长度的键值对,如果输入是 - k1=a,k2=b,k3=c,k8=10
- 我应该选择C4
,因为这是最佳匹配。
理想情况下,我在考虑遍历树,并且对于每个节点,都有一个可以与输入集匹配的选择条件。但很快我发现,这棵树可能非常巨大,Base节点下面可能有数万个子节点。因此,逐个节点地移动可能不是一个好主意。如果有办法更有效地选择节点,我很想知道。
答案 0 :(得分:0)
看起来你的k指向目录结构,这个结构的叶子(每个目录只有一个叶子)是你要查找的节点。您可以将此字符串保留在节点中作为另一个值。不清楚的是k是如何与树相关的 例如
a->c1
a/b/c->c4
答案 1 :(得分:0)
我找到了一个像这样的可行解决方案
----------------------------------------
|rowId|param1|param2|param3|param4|node|
----------------------------------------
|10 | a | | | | C1 |
----------------------------------------
|14 | a | b | c | | C4 |
----------------------------------------
|18 | a | b | | | C5 |
----------------------------------------
让我们称之为条件表。每列代表输入序列(k),对于值的不同组合,有一个要选择的节点。该表可以考虑内存数据结构或RDBMS中的实际表。