关键:从起始位置至右的任意序列,左括号的数目>=右括号的数目
void generateParenthesis(int n )
{
generate( n, n, "" );
}
void generate(int leftNum , int rightNum , string s )
{
//递归出口
if ( leftNum == 0 && rightNum == 0)
{
cout << s << endl;
}
//只要左括号还有,就可以打印
if ( leftNum > 0)
{
generate( leftNum - 1, rightNum, s + '(');
}
//当剩余的左括号的数目小于剩余的右括号的树木的时候,即字符串中左括号的数目>=右括号的数目,就可以打印右括号
if ( rightNum > 0 && leftNum < rightNum)
{
generate( leftNum, rightNum - 1, s + ')');
}
}