1210. 二叉树(求先序后序序列可构成的树的数量)
2013-01-02 20:04
357 查看
/*1210. 二叉树(求先序后序序列可构成的树的数量) 给出先序和后续遍历求可构成的不同树的数量 每次从先序中找出根节点,然后在后续中找到根节点 再判断其余节点是否在同一颗子树上,若是则*2 */ #include <iostream> #include <stdlib.h> #include <string> using namespace std; int buildTree(string s1, string s2) { if(s1.length() == 1) return 1; int i,leftIndex,rightIndex,s=1; for(i=0; i<s2.length(); i++) { if(s2[i] == s1[1]) break; } //如果发现除了跟外的所有节点都处于同一颗树(同为左子树或右子树,有两种可能) if(i == s2.length()-2) s = s*2; leftIndex = i+1; //为左子树长度 //substr(x,length) //从x开始截取length长度的字符串 s *= buildTree(s1.substr(1,leftIndex), s2.substr(0,leftIndex)); rightIndex = s2.length()- leftIndex -1; //右子树长度 if(rightIndex > 0) s *= buildTree(s1.substr(leftIndex+1,rightIndex), s2.substr(leftIndex,rightIndex)); return s; } int main() { string preStr, postStr; cin >> preStr >> postStr; cout << buildTree(preStr, postStr); system("pause"); return 0; }
相关文章推荐
- 实现由先序、中序序列构造二叉树的算法,实现由后序、中序序列构造二叉树的算法
- 学习笔记——已知二叉树的先序中序求后序、中序后序求先序的遍历序列
- 由二叉树的后序序列和中序序列构成二叉树
- 由先序和中序遍历序列建立二叉树
- 由先序和中序序列建立二叉树
- 第11周—项目1(2).1由先序序列和中序序列构造二叉树
- poj2255 二叉树给出先序中序求后序序列
- 二叉树之遍历问题——根据先序中序遍历序列求后序序列
- 给出先序和中序序列,还原二叉树的规律方法
- 第11周项目1-(2)。1由先序序列和中序列构造二叉树
- Java已知二叉树的中序后序求先序序列
- 根据前序和中序序列建造一个二叉树并且输出后序序列
- 树和二叉树的应用举例(相似二叉树,由先序和中序、中序和后序确定二叉树)
- [LeetCode] Binary Tree Longest Consecutive Sequence II 二叉树最长连续序列之二
- 根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树
- 2013-03-17---二叉树递归,非递归实现(附代码)深度,叶子节点数量,逐行打印二叉树
- 中序和前序序列构建二叉树
- 先序构造二叉树并打印(2)
- 二叉树重建 ( 根据中序序列和前序序列获取后序序列)
- 【LeetCode】Construct Binary Tree from Preorder and Inorder Traversal 根据先序序列和中序序列恢复二叉树