ツリーを複製/乗算するには、(g++ の場合) (計算時間) 最適化されたアルゴリズム ツリー構造が必要です。
私のツリーは k-ary ツリーになりますが、必ずしも埋められるわけではありません。主な操作は、既存のツリーを (k 回まで) 乗算し、ツリーをサブツリーとして新しいノードに追加することです。次に、固定レベルのルールを保持するためにリーフ ノード レベルが消去されます。
これを提供するデータ構造を知っている人はいますか?
乗算の例: 二分木があるとします。
A
|
/ \
/ \
B C
| / \
| / \
D E F
そして、新しいノードを追加したい/乗算したい
R
/ \
/ \
.. ..
したがって、結果は次のようになります
R
/ \
/ \
/ \
/ \
/ \
A A
| |
/ \ / \
/ \ / \
B C B C
| / \ | / \
| / \ | / \
D E F D E F
これをヒープのような構造の std::vector で整理しようとしましたが、ツリー全体を一度にコピーするのではなく、各ツリー レベルを個別にコピーする必要があるため、ツリーの乗算はまだ少し遅いです。