我有一个树状结构,包含父母和孩子。父母可以拥有的孩子数量没有限制。树中的每个节点都有一些特定的属性。
我有一个表示路径的结构列表。路径中的每个节点都具有一组具有某些特定值的属性。路径中的第一个节点始终与上述树的根相同。
我想从Root开始遍历Tree,并通过比较Tree on Node的属性和路径上Node的属性来检查树中是否存在路径。同时保持满足匹配条件的TreeNodes记录。 Plz注意,TreeNode和PathNode是完全不同的类型,它们只是具有一些常见的属性,例如姓名,身份证,地点等。
我能想到的最简单的方法是通过递归调用遍历树的子节点,并且对于每个级别的树,我比较路径中的下一个节点,但我不确定是否有任何简单的方法它。我将不得不在C#中实现它,所以有任何特定的结构或库可用。任何特定于语言的解决方案都会非常有用,否则我可以将其转换为C#,只需了解它应该如何设计。
答案 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)
让我们抽象地解决问题。
路径是:
树是:
请注意,在此定义中没有空树。你说总有根。
我们现在定义谓词“匹配”如下。
这个草图应该足够详细,可以用您选择的语言编写实现。