グラフでAがBの祖先であり、Aが配列内でBよりも先にあるとします。他に何も仮定することはできません。 したがって、配列は次の再帰関数によって生成できます。
function sourceArrays(Tree t)
// leafe node
if t == null
return empty list;
r = root(t);
append r to existing arrays;
la = sourceArrays(t.left);
ra = sourceArrays(t.right);
ac = createArrayCombitations(la, ra);
append ac to existing arrays;
end
function createArrayCombitations(la, ra)
foreach a in la
foreach b in ra
r = combineArrays(a,b);
add r to result;
end
end
end
function combineArrays(a, b)
generate all combinations of elements from two array such that order of elements in each array is preserved.
Ie if x precedes y in a or b the x precedes y in result
私はあなたの答えの最後の部分を理解していません!それを私に説明してもらえますか? – voguendi
"最後の部分"はどういう意味ですか? – jira
関数combineArrays(a、b) 各配列の要素の順序が保存されるように、2つの配列の要素のすべての組み合わせを生成します。 xがaまたはbにyよりも先行する場合、xは結果のyに先行する – voguendi