Tôi muốn triển khai phương pháp cho phép tôi tìm nút trong cây. Cách tôi làm điều đó là đệ quy bằng cách sử dụng các biến toàn cầu để biết khi nào nên dừng lại.Tìm nút khi đi ngang qua cây
Tôi có lớp:
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;
}
Và phương pháp tôi có ngay bây giờ là:
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);
}
}
và cách tôi sử dụng Find phương pháp là như sau:
// 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);
Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể làm cho phương pháp này thanh lịch hơn. Tôi sẽ giống như chữ ký của phương thức để trông giống như:
public Node FindNode(Node rootNode);
Tôi nghĩ rằng đó là thừa những gì tôi đang làm và có lẽ là cách tốt hơn để tạo phương pháp đó. Hoặc có lẽ tôi có thể thay đổi lớp Node để tôi có thể đạt được điều tương tự với truy vấn LINQ.
+1 Đó là nguyên nhân tuyệt vời, tôi có thể lọc dựa trên bất kỳ tiêu chí như:. 'Root.GetSubTree() FirstOrDefault (x => x.Name == "Foo") ; 'Cảm ơn rất nhiều! –
Câu trả lời rõ ràng, chính xác như vậy. – AndyUK