二叉树的递归遍历(dp)

已知先序遍历跟后序遍历,求这样的二叉树的个数

对于一条链来说,先序跟后序的区别就是正着念跟倒着念的区别,利用这条性质,不停的将先序遍历得到的串去掉第一个后进行划分(同时后序遍历得到的串去掉最后一个)

#include 
using namespace std;
const int N=30;
int dp[N][N][N][N];
char x[N], y[N];
int dfs(int la, int ra, int lb, int rb)
{
	if(la>ra) return 0;
	if(x[la]!=y[rb]) return dp[la][ra][lb][rb]=0;
	if(la==ra) return 1;
	if(dp[la][ra][lb][rb]=!-1) return dp[la][ra][lb][rb];
	int ans=0;
	//左右子树均不为空 
	for(int i=1; la+i


你可能感兴趣的:(普通dp,二叉树的遍历)