我正在进行Word Sense Disambiguation(WSD)的毕业设计
我的代码中有一个问题
我无法开发可以执行以下操作的代码: 我想在这个结构中存储字符串值
root
/ \
A B
/ / \ / / \
C D E C D E
然后我想遍历此结构中的每个路径并将其存储在锯齿状数组(Array of Array)中,并且此锯齿状数组中的每个数组都应包含遍历节点的值(忽略根节点)
A C
A D
A E
B C
B D
B E
关于如何做到这一点的任何想法?
这正是我需要的...... 这个数组将被给出
string[][] English_Senses = new string[][] { new string[] { "hit", "multiply" }, new string[] { "man", "leg" } };
我需要一个代码,可以使用以下值填充以下锯齿状数组
string[,] Features = new string{{"hit","man"},{"hit","leg"},{"mutiply","man"},{"multiply","leg"}};
我希望有人能帮助我。
请注意,在运行时之前,不知道English_Senses数组的大小,它可以是任意大小,并且可以包含任意数量的数组,并且此锯齿状数组中的每个数组都可以包含任何元素数。 / p>
答案 0 :(得分:3)
让我们假设您有一个类似于以下
的节点结构public class Node {
public string Data;
public List<Node> Children = new List<Node>();
}
听起来您想创建一个List<string>
,其中包含Data
元素的所有可能遍历路径。如果是这样,请尝试以下
public List<string> GetTraversal(Node root) {
var list = new List<string>();
foreach (var child in root.Children()) {
GetTraversal(child, "", list);
}
}
private void GetTraversal(Node node, string path, List<string> list) {
path = path == "" ? node.Data : path + " " + node.Data;
if (node.Children.Count == 0) {
list.Add(path);
} else {
foreach(var child in node.Children) {
GetTraversal(child, path, list);
}
}
}