C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■103469 / )  Re[5]: 二分木のクラス
□投稿者/ kiku (454回)-(2024/11/28(Thu) 16:50:09)
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


返信 編集キー/


管理者用

- Child Tree -