問題:https://leetcode.com/problems/unique-binary-search-trees-ii/
再帰的なパスを記述するための最小と最大のコードは、ここに書かれた再帰を使用して、より簡潔であるべきです。
クラスのソリューション{ パブリック: のTreeNode *クローン(ツリーノード* pを、int型のval) { 場合(!p)の戻りnullptr; ツリーノード *ノード= 新しいツリーノード(P->ヴァル+ val)で、 ノード - >左=クローン(P-> 左、ヴァル)。 ノード - >右=クローン(P-> 右、ヴァル)。 リターン・ノード; } ベクトル <ツリーノード*> generateTrees(int型N){ ベクトル <ベクトル<ツリーノード* >> DP(N + 1 )。 以下のための(int型K = 1。K <= N。K ++ ) { ため(INT C = 1 ; <= K C、C ++ ) { int型 L = C - 1 。 INTの R = K - C。 ベクター <ツリーノード*>&左= DP [L]。 ベクター <ツリーノード*>&右= DP [R]。 もし(left.size()== 0 && right.size()== 0 ) { ツリーノード * pを= 新しいですツリーノード(C)。 DP [K] .push_back(P)。 } そう であれば(left.size()== 0 ) { ため(int型 iは= 0 ; iはright.size()<; iは++ ) { ツリーノード * pを= 新しいツリーノード(C)。 P - >右= クローン(右[I]、C)。 DP [K] .push_back(P)。 } } そう であれば(right.size()== 0 ) { 用(INT iが= 0 ; i)は(left.sizeを<; iは++ ) { ツリーノード * pを= 新しいツリーノード(C)。 P - > =左、左[I]。 DP [K] .push_back(P)。 } } 他 { ため(int型 I = 0 ; iが(left.sizeを<); iが++ ) { ため(INT J = 0 ; J <right.size(); J ++ ) { TreeNodeの * P =新しいツリーノード(C); P - > =左、左[I]。 P - >右= クローン(右[J]、C)。 DP [K] .push_back(P)。 } } } } } 戻りDP [n]は、 } }。