卡特兰数--前序遍历对应的二叉树/进栈顺序对应的出栈顺序
来源:互联网 发布:优化设计方案 编辑:程序博客网 时间:2024/05/17 08:20
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>::reverse_iterator sEnd = s.rend();while (sBegin < sEnd){cout<<*sBegin<<" ";sBegin++;}cout<<endl;return;}int stackSize = s.size();//栈中出栈i个元素,当前元素进栈,然后在处理后续元素for (int i=0; i<=stackSize; i++){//对于非首次操作,栈顶元素是当前元素,首先将当前元素弹出,然后弹出栈中第i个元素if (i!=0){s.pop_back();seq.push_back(s.back());s.pop_back();}//当前元素在出栈i个元素之后进栈s.push_back(preOrder[index]);//处理后续元素AllBinaryTreeCore(preOrder, index+1, n, s, seq);}//栈和序列恢复初始状态s.pop_back();for (int i=0; i<stackSize; i++){s.push_back(seq.back());seq.pop_back();}}//Given preorder of a binary tree, print out all the binary trees//二叉树的中序遍历和正确的出栈顺序一致,使用一个vector模拟进出栈,一个序列表示当前已出栈的序列void AllBinaryTree(int* preOrder, int n){if (preOrder==NULL || n==0)return;vector<int> s;//用来模拟进出栈vector<int> seq;//存放已出栈的序列AllBinaryTreeCore(preOrder, 0, n, s, seq);}
- 卡特兰数--前序遍历对应的二叉树/进栈顺序对应的出栈顺序
- 出栈顺序和卡特兰数的关系
- n个不同数所有可能的出栈顺序及其引出的卡特兰数(catalan)
- 卡特兰数---n 个元素顺序入栈,则可能的出栈序列有多少种
- 卡特兰数(出栈序列以及已知先序遍历求树的形状的个数)
- 卡特兰数应用--n个元素的出栈顺序与从(0,0)到(n,n)不穿过对角线的方法数
- 卡特兰数,程序实现,递归,循环,BST和出入栈顺序的应用
- 卡特兰数及栈出栈顺序问题的相关研究
- 顺序存储的前序遍历(二叉树)
- 简单二叉树的构造,前序遍历顺序为;中序遍历顺序为;后序遍历顺序为;
- 出栈序列与卡特兰数
- 合理的出栈序列, 卡特兰数, 栈:先进后出
- 经典:求指定入栈顺序序列对应的所有可能出栈序列
- Mybatis按顺序查询出对应的数据字段方式
- 栈的出栈顺序数
- offer面试题---根据前序遍历和中序遍历的顺序输出二叉树
- 二叉树的遍历顺序
- 出栈次序问题---卡特兰属的另一种理解
- js异步调用常犯的错误
- asdfwefasdfasdf
- 泛型的基本含义-便于阅读理解
- Linux系统调用详解
- utf-8文件读取
- 卡特兰数--前序遍历对应的二叉树/进栈顺序对应的出栈顺序
- 各种RGB和YUV相互转换的代码
- MyEclipse 调试时不自动显示变量值
- IEEE(电子电气工程师协会)802局域网标准
- 故事的开始
- storm 的状态转换函数
- 在win7环境下测试oracle kill long transaction
- 输出javabean集合信息
- Hibernate学习09---基于XML配置的一对一单向外键关联