大家一起数二叉树

1.我们知道二叉树的访问一般都涉及到动态规划,因为左子树还有左右子树,用动态规划可以节省开销
这一题思路差不多也是动态规划用一个dp[i][j]存信息,i是有多少节点,j是有多少叶子节点,显然j<i;
动态规划一般要有一个初始值,由初始值推出其他,还要有状态转换方程,首先初始值d【0】【0】=1表示根节点是叶子节点,
dp【1】【1】=1表示如果节点为1和没有节点是一样的;
我们知道如果左边有x个节点,左边有y个叶子节点,那么右边就有
i-x-1个节点,j-y个叶子节点,那么状态转换方程就出来了
dp[i][j]=dp[i][j]+dp[i-x-1][j-y]*dp[x][y];`

#include<iostream>
#include<bits/stdc++.h>
#define mod 1000000007
using namespace</

猜你喜欢

转载自blog.csdn.net/qq_43634564/article/details/107286780