根据Homespring提出的语言标准,向上游移动的鲑鱼需要在“河流系统中执行顺序搜索...以找到与鲑鱼名称相同的河流节点”(第6.4.2节)。问题是,河流节点存储在一个n叉树中,所以我不确定如何进行这棵树的顺序搜索。谷歌搜索没有相关结果,维基百科页面甚至没有提到任何遍历方式。在k叉树中进行顺序搜索是否可能?
是的,确实可以做到这一点!我们通过类比来推理。在二叉树中,一个节点长这样:
+---+
| v |
+---+
/ \
T0 T1
然后进行中序遍历,具体做法如下:
换句话说,你可以想象从左到右扫过去,发现值时访问它们。扫描首先遇到T0,然后遇到v,最后遇到T1。
多路树中的节点长这样:
+----+----+----+ ... +----+
| v0 | v1 | v2 | ... | vn |
+----+----+----+ ... +----+
/ | | | | \
T0 T1 T2 T3 Tn Tn+1
void inorderWalk(Node* v) {
if (v == null) return;
for (int i = 0; i < v.numChildren; i++) {
inorderWalk(v.child[i]);
visit(v.value[i]);
}
inorderWalk(v.child[v.numChildren]);
}