2024/11/28(Thu) 17:22:16 編集(投稿者)
■No103468 (星は昴 さん) に返信
> ■No103465 (とっちゃん さん) に返信
> 回答まことにありがとうございます。
ご要望通りできちゃいました。
public override string ToString()
{
return ToString(Root, "");
}
private string ToString(Node node, string depth)
{
if (node == null) return "";
//右部分木
string right = ToString(node.Right, depth + "R");
//右空行
string rightspace = "";
if(node.Right != null)
{
rightspace = SpaceIndent(depth + "R") + Environment.NewLine;
}
//現在ノード
string current = Indent(depth) + node.Key + Environment.NewLine;
//左空行
string leftspace = "";
if(node.Left != null)
{
leftspace = SpaceIndent(depth + "L") + Environment.NewLine;
}
//左部分木
string left = ToString(node.Left, depth + "L");
//合成
return right + rightspace + current + leftspace + left;
}
private string Indent(string depth)
{
string indent = string.Empty;
for (int i = 0; i < depth.Length; i++)
{
if (i < depth.Length - 1)
{
if (depth[i] == depth[i + 1])
{
indent = indent + " ";
}
else
{
indent = indent + "│";
}
}
if (i == depth.Length - 1)
{
if (depth[i] == 'R')
{
indent = indent + "┌";
}
else
{
indent = indent + "└";
}
}
}
return indent;
}
private string SpaceIndent(string depth)
{
string indent = string.Empty;
for (int i = 0; i < depth.Length; i++)
{
if (i < depth.Length - 1)
{
if (depth[i] == depth[i + 1])
{
indent = indent + " ";
}
else
{
indent = indent + "│";
}
}
if (i == depth.Length - 1)
{
if (depth[i] == 'R')
{
indent = indent + "│";
}
else
{
indent = indent + "│";
}
}
}
return indent;
}
結果
┌Yayoi R
││ RL
│└Wakana RL
│ R
Sayaka
│ L
│ ┌Reika LRRR
│ │ LRRR
│ ┌Ranko LRR
│ │ LRR
│┌Natsuko LR
│││ LRL
││└Miwako LRL
││ LR
└Kayoko L
│ LL
└Wakana LL