我正在尝试提高我们应用程序的性能。我以调用树的形式获得了性能信息,其中包含以下节点类:
public class Node { public string Name; // method name public decimal Time; // time spent in method public List<Node> Children; }
我想打印出树,这样我就可以看到节点之间的线,就像这个问题一样。我可以在C#中使用什么算法来做到这一点?
编辑:显然我需要使用递归-但我的尝试一直将行放在错误的位置。我要的是一种特定的算法,它将以一种不错的方式打印树-何时打印垂直线以及何时打印水平线的详细信息。
编辑:仅使用字符串的副本来缩进节点是不够的。我不在找
A |-B |-|-C |-|-D |-|-|-E |-F |-|-G
它一定要是
A +-B | +-C | +-D | +-E +-F +-G
或类似的东西,只要树结构可见。请注意,C和D的缩进不同于G-我不能只使用重复的字符串来缩进节点。
诀窍是传递一个字符串作为缩进,并特别对待最后一个孩子:
class Node { public void PrintPretty(string indent, bool last) { Console.Write(indent); if (last) { Console.Write("\\-"); indent += " "; } else { Console.Write("|-"); indent += "| "; } Console.WriteLine(Name); for (int i = 0; i < Children.Count; i++) Children[i].PrintPretty(indent, i == Children.Count - 1); } }
如果这样调用:
root.PrintPretty("", true);
将以以下样式输出:
\-root \-child |-child \-child |-child |-child \-child |-child |-child | |-child | \-child | |-child | |-child | |-child | \-child | \-child | \-child \-child |-child |-child |-child | \-child \-child \-child