我需要能够搜索任意多个孩子的树 . 它可能看起来像这样 .
P
/ | \
C C C layer 1
/ | \
C C C layer 2
|
C layer 3
/ | \
C C C layer 4
在每个C中有任意多个子节点 . 在第1层中为每个起始节点设置双链表是否方便? (在第1层中,非扩展节点也可能会扩展) . 我需要评估并使用每个子树 .
什么是最简单的方法?或者也许某种深度优先搜索/广度优先搜索更好?树是在飞行中构建的 .
谢谢
1 回答
最简单的方法是使用递归 .
假设您的树存储T类型的项目,该类型实现
IEquatable<T>
.首先,让我们编写一个非常基本的树类:
现在我们可以编写一个方法来非常简单地使用递归搜索该树 . 这将返回包含指定值的第一个节点(如果找到),如果未找到此类节点,则返回null .
很容易使其适应返回与目标匹配的所有节点:
出于演示目的,这是一个可编辑的控制台应用程序 . 它包含一个
makeTree()
方法,我用它来制作一个深度为4的树,每个节点有5个子节点 .然后,它使用
Find<T>(Node<T> root, T target)
递归搜索树以查找指定的目标值 . 一个会成功,另一个会失败: