Given preorder of a binary tree, print out all the binary trees
分析:根据前序遍历得到对应所有二叉树的中序遍历,类似于给出一个进栈顺序,输出所有的出栈顺序。可以使用一个vector来模拟进出栈,使用另一个vector来保存所有已出栈的序列。总共的二叉树数目是卡特兰数1/(n+1)C(n)(2n)
对于第i个进栈元素,当前栈中有k个元素,第i个元素可以在栈中弹出j(j=0,1,...n)个元素中后再进栈。之后i的后续元素再进行进栈操作。
void AllBinaryTreeCore(int* preOrder, int index, int n, vector<int> s, vector<int> seq){
//所有元素已经全部进过栈
if (index == n){
//打印已出栈序列元素
vector<int>::iterator seqBegin = seq.begin();
vector<int>::iterator seqEnd = seq.end();
while (seqBegin < seqEnd){
cout<<*seqBegin<<" ";
seqBegin++;
}
//打印栈中尚未出栈的元素,此时按照待出栈顺序,从后向前打印
vector<int>::reverse_iterator sBegin = s.rbegin();
vector<int>::r