-1

Id 51 のすべての先祖を取得したい: 1,11,22,31,41.

最初に ID 51 のオブジェクトを見つけてから、親階層を上にトラバースするアルゴリズムは必要ありません。

階層を再帰的に下って、すべての祖先を取得したいと考えています。

しかし、私はそのようにゲームが正しくプレイされていないと思いますか?祖先を取得できるたびに、次の子が ID 52 であるかどうかを知ることができないためです。巧妙な回避策はありますか?

 1
-11
 -21
 -22
  -31
   -41
    -51
  -32
  -33
 -23
-12
-13

アップデート

@Jim Mischel は、オブジェクトを見つけてそのコードを表示する方法を尋ねました。

public static T FindChild<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> selectorChildrenProperty, Predicate<T> condition) where T : class {

    if(source == default(T)) {
        throw new ArgumentNullException("source"); 
    }

    T t = default(T);
    foreach(T item in source) {
        if(condition(item)) {
            t = item;
            break;
        }
        else {
            t = selectorChildrenProperty(item).FindInHierarchy<T>(selectorChildrenProperty, condition);
            if(!Equals(t, default(T))) {
                break;
            }
        }
    }
    return t;
}

これは、特定のプロパティを持つオブジェクトを見つけて返します。

もちろん、2 番目のジェネリック メソッドを記述して、見つかったオブジェクトから開始し、親が null になるまで階層をトラバースすることもできますが...

あえて頼む賢いアルゴリズムがあるかもしれません...

私より賢い人。

4

1 に答える 1