私は、バイナリ検索ツリーコンソールアプリケーション、具体的には、2つのターゲットノード間の最短パスを一覧表示するメソッドに取り組んでいます。私のアプローチは
1)ルートノードからターゲットまでのツリー内の各ターゲットノードの値のArrayListを作成します(パスごとに1つのArrayList)2)2つのArrayListを比較し、最後の1つ(2つの場所を表す)を除くすべての重複を削除しますパスブランチ3)残りの2つのArrayListを1つの配列に結合し、forループを使用してコンソールに出力します
これは私が取り組んでいる方法です。私が抱えている問題は、ArrayListsが_pathArrayList1:5、7の値で出力されているにもかかわらず、「if(list1 [n] == list2 [n])」というブロックに入らないことです。 、9 _pathArrayList2の内容:5、7、9、10、12、11
型キャストを試しましたが、役に立ちませんでした。
array<T>^ removeDuplicates(ArrayList^ list1, ArrayList^ list2)
{
    int forLoopCount;
    int i; // for loop iterator for this method
    Console::WriteLine(L"Contents of _pathArrayList1: ");
    for (i = 0; i < list1->Count; i++)
        Console::WriteLine(list1[i]);
    Console::WriteLine(L"Contents of _pathArrayList2"); 
    for (i = 0; i < list2->Count; i++)
        Console::WriteLine(list2[i]);
    // find out which array is the shortest; we need to use the shorter of the two
    if (list1->Count - list2->Count < 0)
        forLoopCount = list1->Count;
    else
        forLoopCount = list2->Count;
    Console::WriteLine("Value of forLoopCopunt is " + forLoopCount);
    array<T>^ combineArray = gcnew array<T>(forLoopCount);
    for (int n = 0; n < forLoopCount; n++)
    {
        Console::WriteLine(L"List1[n] = " + list1[n]);
        Console::WriteLine(L"list2[n] = " + list2[n]);
        if (list1[n] == list2[n])  // never entering this block of code
        {
            if (list2[n+1] == list1[n+1])
            {
                Console::WriteLine(L"Removing " + list1[n] + " and " + list2[n]);
                list1->RemoveAt(n);
                list2->RemoveAt(n);
                n --;
            }
            else
            {
                Console::WriteLine(L"Deleting " + list1[n]);
                list1->RemoveAt(n);
                //_pathArrayList1->Reverse();
                return combineArray = combineArrays(_pathArrayList1, _pathArrayList2);
            }
        }
    }
    return combineArray = combineArrays(_pathArrayList1, _pathArrayList2);
}