您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: