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

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

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

多分木の要素探索

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90700 / inTopicNo.1)  多分木の要素探索
  
□投稿者/ ふぐり (1回)-(2019/04/09(Tue) 17:36:08)

分類:[C#] 

多分木の要素探索

Unity(C#)を使っています
多分木から要素を検索する再帰的プログラムを作っているのですがうまく動きません。

以下のサイトを参考にして子要素の数を数えるプログラムは動作したのですが
特定の要素を持つノードを検索するプログラムがうまくいかず無限ループしています。

参考サイト:http://monakaice88.hatenablog.com/entry/20131215/1387113494


多分木のノード
public class TreeNode
{
    public TreeNode parent;    //親要素
    public int element;   //自身の要素
    public List<TreeNode> childList;   //子要素番号リスト

        :
        :
        :

×要素探索メソッド呼び出し
    public TreeNode searchNode(int no)
    {
        return __searchChild(this, no);
    }

×要素探索メソッド(再帰)
    private static TreeNode __searchChild(TreeNode parent, int no)
    {
        Debug.Log("search "+parent.element +":"+no);
        if (parent.element == no)
        {
            return parent;
        }
        else
        {
            if (parent.hasChild())
            {
                foreach (TreeNode child in parent.childList)
                {
                    TreeNode t = __searchChild(child, no);
                    if (t != null)
                    {
                        return t;
                    }
                }
            }
        }
        return null;
    }

〇子要素の数を取得するプログラム 呼び出し側
    public int getAllChildCount()
    {
        int counter = -1;//自身の分マイナス
        __getChildNodeCount(this, ref counter);
        return counter;
    }

〇子要素を取得するプログラム 再帰
    private static void __getChildNodeCount(TreeNode node, ref int count)
    {
        count++;
        //子要素がある場合
        if (node.hasChild())
        {
            foreach(TreeNode child in node.childList)
            {
                __getChildNodeCount(child, ref count);
            }
        }
    }

間違っている部分のご指摘やアドバイスお願いします

引用返信 編集キー/
■90703 / inTopicNo.2)  Re[1]: 多分木の要素探索
□投稿者/ キングダム (16回)-(2019/04/10(Wed) 00:58:21)
No90700 (ふぐり さん) に返信

実行してみましたけど探索のロジックは問題なかったですよ
https://paiza.io/projects/PcGr-sfAlFE-83JgL5wXtg

データが再帰してるんだと思います
再帰してるデータを探索したいってわけじゃないですよね
TreeNodeを作ってるところとかchildを追加してるところとか見直すとよいです


引用返信 編集キー/
■90704 / inTopicNo.3)  Re[2]: 多分木の要素探索
□投稿者/ ふぐり (2回)-(2019/04/10(Wed) 09:17:02)
No90703 (キングダム さん) に返信
> ■No90700 (ふぐり さん) に返信
>
> 実行してみましたけど探索のロジックは問題なかったですよ
> https://paiza.io/projects/PcGr-sfAlFE-83JgL5wXtg
>
> データが再帰してるんだと思います
> 再帰してるデータを探索したいってわけじゃないですよね
> TreeNodeを作ってるところとかchildを追加してるところとか見直すとよいです
>
>
ありがとうございます。
見直してみたところ、ツリー作成部分のWhile条件式が間違っていました。
探索ロジックが間違っているという考えから抜け出せず自分自身が無限ループしていました。

ありがとうございました
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ