public T GetChildInType <T>() where T : Node { Queue <Node> nodeStack = new Queue <Node>(); nodeStack.Enqueue(_root); while (nodeStack.Count > 0) { Node c = nodeStack.Dequeue(); if (c.GetType() == typeof(T)) { return(c as T); } foreach (Node child in c.GetChildren) { nodeStack.Enqueue(child); } } return(null); }
public T[] GetChildrenInType <T>() where T : Node { Queue <Node> nodeStack = new Queue <Node>(); List <T> list = new List <T>(); nodeStack.Enqueue(_root); while (nodeStack.Count > 0) { Node c = nodeStack.Dequeue(); if (c.GetType() == typeof(T)) { list.Add(c as T); } foreach (Node child in c.GetChildren) { nodeStack.Enqueue(child); } } return(list.ToArray()); }