如何使用c#实现非二叉树结构

时间:2012-02-26 18:12:02

标签: c# binary-tree

我正在进行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>

1 个答案:

答案 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);
    }
  }
}