私は、バイナリ検索ツリーコンソールアプリケーション、具体的には、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);
}