如何在遍历树结构时匹配路径

时间:2014-10-17 03:46:31

标签: c# algorithm tree traversal

我有一个树状结构,包含父母和孩子。父母可以拥有的孩子数量没有限制。树中的每个节点都有一些特定的属性。

我有一个表示路径的结构列表。路径中的每个节点都具有一组具有某些特定值的属性。路径中的第一个节点始终与上述树的根相同。

我想从Root开始遍历Tree,并通过比较Tree on Node的属性和路径上Node的属性来检查树中是否存在路径。同时保持满足匹配条件的TreeNodes记录。 Plz注意,TreeNode和PathNode是完全不同的类型,它们只是具有一些常见的属性,例如姓名,身份证,地点等。

我能想到的最简单的方法是通过递归调用遍历树的子节点,并且对于每个级别的树,我比较路径中的下一个节点,但我不确定是否有任何简单的方法它。我将不得不在C#中实现它,所以有任何特定的结构或库可用。任何特定于语言的解决方案都会非常有用,否则我可以将其转换为C#,只需了解它应该如何设计。

2 个答案:

答案 0 :(得分:0)

我在下面编写了扩展来遍历递归目录/文件树。它可能不是你的确切情况,但听起来很相似。我希望代码有所帮助。

// produce flat list of files and path 
var allFiles = folders.TraverseValuesWithPaths(folder => folder.Folders, folder => folder.Files, folder => folder.Name, file => file.Name, "\"", "\"");

用法

Worker
ID
FName
LName
City
Age
;
18900;Giannis;Papadopoulos;PAtisiwn 28, Athens;42
15222;Fotini;Nikolaou;Kifisias 33, Marousi;34
99877;Kostas;Panagiotopoulos;Karaiskaki 44, Petralona;29 

答案 1 :(得分:0)

让我们抽象地解决问题。

路径是:

  • 空路径,或
  • 路径片段(路径的头部),后跟路径(路径的尾部)

树是:

  • 一个节点,后跟一个零个或多个树(子节点)的列表。

请注意,在此定义中没有空树。你说总有根。

我们现在定义谓词“匹配”如下。

  • 路径片段可以匹配树节点。它的匹配方式取决于你。
  • 空路径匹配所有树。
  • 假设我们有一个头部后跟一个尾部,一个节点后跟一个孩子。当且仅当(1)头部与节点匹配时,路径才匹配树;(2)尾部为空,或者至少存在一个与尾部匹配的子项。

这个草图应该足够详细,可以用您选择的语言编写实现。