我想實現一種方法,使我能夠在樹中查找節點。我這樣做的方式是遞歸地使用全局變量來知道何時停止。遍歷樹時查找節點
我有類:
class Node // represents a node in the tree
{
// constructor
public Node() {
Children = new List<Node>();
}
public List<Node> Children;
public string Name;
public string Content;
}
而我現在所擁有的方法是:
private bool IsNodeFound = false; // global variable that I use to decide when to stop
// method to find a particular node in the tree
private void Find(Node node, string stringToFind, Action<Node> foundNode)
{
if(IsNodeFound)
return;
if (node.Content.Contains(stringToFind)){
foundNode(node);
IsNodeFound =true;
}
foreach (var child in node.Children)
{
if (child.Content.Contains(stringToFind)){
foundNode(node);
IsNodeFound =true;
}
Find(child, stringToFind, foundNode);
}
}
我用的查找方法是喜歡的方式:
// root is a node that contain children and those children also contain children
// root is the "root" of the tree
IsNodeFound =false;
Node nodeToFind = null;
Find(root, "some string to look for", (x)=> nodeToFind=x);
所以我的問題是我該如何使這種方法更優雅。我會想方法的簽名看起來像:
public Node FindNode(Node rootNode);
我認爲這是冗餘我在做什麼,並有可能創造方法的更好的方法。或者也許我可以改變Node類,這樣我就可以用linq查詢來實現同樣的功能。
1這是很大的,因爲我可以基於任何標準,例如過濾:'root.GetSubTree()FirstOrDefault(X => x.Name == 「富」) ;'非常感謝! –
這麼幹淨,準確的答案。 – AndyUK