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

わんくま同盟

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

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

■103469 / 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


編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[4]: 二分木のクラス /星は昴 →Re[6]: 二分木のクラス /星は昴
 
上記関連ツリー

二分木のクラス / 星は昴 (24/11/28(Thu) 14:00) #103462
Re[1]: 二分木のクラス / kiku (24/11/28(Thu) 14:18) #103463
  └ Re[2]: 二分木のクラス / とっちゃん (24/11/28(Thu) 15:10) #103464
    └ Re[3]: 二分木のクラス / とっちゃん (24/11/28(Thu) 15:10) #103465
      ├ Re[4]: 二分木のクラス / とっちゃん (24/11/28(Thu) 15:11) #103466
      ├ Re[4]: 二分木のクラス / kiku (24/11/28(Thu) 15:15) #103467
      └ Re[4]: 二分木のクラス / 星は昴 (24/11/28(Thu) 15:38) #103468
        └ 二分木のクラス / kiku (24/11/28(Thu) 16:50) #103469 ←Now
          └ Re[6]: 二分木のクラス / 星は昴 (24/11/28(Thu) 17:38) #103470 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信