using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TreeToText
{
class TreeToText
{
const string LineMid = "├─";
const string LineLast = "└─";
const string Line = "│ ";
const string Space = " ";
/// <summary>
/// Convert a tree node to text
/// </summary>
/// <param name="node">Root node to convert</param>
/// <returns>Text</returns>
public static string Tree2Text(TreeNode node)
{
if (node == null) return null;
StringBuilder builder = new StringBuilder();
builder.AppendLine(TreeNodeText(node));
Tree2Text(builder, node, "");
return builder.ToString();
}
static string TreeNodeText(TreeNode node)
{
return node.Text;
}
static void Tree2Text(StringBuilder builder, TreeNode parent, string prefix)
{
int nodesCount = parent.Nodes.Count;
if (nodesCount == 0) return;
int nodeMaxIndex = nodesCount - 1;
for (int i = 0; i < nodesCount; i++)
{
builder.Append(prefix);
TreeNode node = parent.Nodes[i];
if (i != nodeMaxIndex)
{
builder.Append(LineMid);
builder.AppendLine(TreeNodeText(node));
Tree2Text(builder, node, prefix + Line);
}
else
{
builder.Append(LineLast);
builder.AppendLine(TreeNodeText(node));
Tree2Text(builder, node, prefix + Space);
}
}
}
}
}
Related